Skip to content

to_latex adds extra empty header row when index has a name even if index=False #26111

Closed
@javidcf

Description

@javidcf

Code Sample, a copy-pastable example if possible

import pandas as pd

df = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b'], index=pd.RangeIndex(2, name='Idx'))

# When the index has a name you get an extra header row for it
print(df.to_latex())
# \begin{tabular}{lrr}
# \toprule
# {} &  a &  b \\
# Idx &    &    \\
# \midrule
# 0   &  1 &  2 \\
# 1   &  3 &  4 \\
# \bottomrule
# \end{tabular}

# However, when you do not want the index you still get the extra header row
print(df.to_latex(index=False))
# \begin{tabular}{rr}
# \toprule
#  a &  b \\
#    &    \\
# \midrule
#  1 &  2 \\
#  3 &  4 \\
# \bottomrule
# \end{tabular}

# What I would expect is the same as if there was no index name
print(df.reset_index(drop=True).to_latex(index=False))
# \begin{tabular}{rr}
# \toprule
#  a &  b \\
# \midrule
#  1 &  2 \\
#  3 &  4 \\
# \bottomrule
# \end{tabular}

Problem description

As shown above, producing LaTeX tables with indices that have a name produces an extra row in the header even when index=False. As I see it, this is not correct, since you just get an empty extra header line, and the behavior should be the same as if the data frame did not have an index with a name.

Expected Output

import pandas as pd

df = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b'], index=pd.RangeIndex(2, name='Idx'))
print(df.to_latex(index=False))
# \begin{tabular}{rr}
# \toprule
#  a &  b \\
# \midrule
#  1 &  2 \\
#  3 &  4 \\
# \bottomrule
# \end{tabular}

Output of pd.show_versions()

INSTALLED VERSIONS

commit: None
python: 3.7.1.final.0
python-bits: 64
OS: Windows
OS-release: 10
machine: AMD64
processor: Intel64 Family 6 Model 158 Stepping 9, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None
LOCALE: None.None

pandas: 0.24.2
pytest: 4.0.2
pip: 18.1
setuptools: 40.6.3
Cython: 0.29.2
numpy: 1.15.4
scipy: 1.1.0
pyarrow: None
xarray: None
IPython: 7.2.0
sphinx: 1.8.2
patsy: 0.5.1
dateutil: 2.7.5
pytz: 2018.7
blosc: None
bottleneck: 1.2.1
tables: 3.4.4
numexpr: 2.6.8
feather: None
matplotlib: 3.0.2
openpyxl: 2.5.12
xlrd: 1.2.0
xlwt: 1.3.0
xlsxwriter: 1.1.2
lxml.etree: 4.2.5
bs4: 4.6.3
html5lib: 1.0.1
sqlalchemy: 1.2.15
pymysql: None
psycopg2: None
jinja2: 2.10
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: None
gcsfs: None

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions