import pandas as pd
df1 = pd.read_csv('test.csv', header=[0,1], index_col=0)
print(df1)
df2 = pd.read_excel('test.xlsx', header=[0,1], index_col=0, engine='openpyxl')
print(df2)
assert df1.equals(df2)
Empty DataFrame
Columns: []
Index: []
Traceback (most recent call last):
File "<...>/venv/demo_suite/issue2/test.py", line 6, in <module>
df2 = pd.read_excel('test.xlsx', header=[0,1], index_col=0, engine='openpyxl')
File "<...>/venv/lib/python3.13/site-packages/pandas/io/excel/_base.py", line 494, in read_excel
data = io.parse(
sheet_name=sheet_name,
...<20 lines>...
dtype_backend=dtype_backend,
)
File "<...>/venv/lib/python3.13/site-packages/pandas/io/excel/_base.py", line 1780, in parse
return self._reader.parse(
~~~~~~~~~~~~~~~~~~^
sheet_name=sheet_name,
^^^^^^^^^^^^^^^^^^^^^^
...<16 lines>...
**kwds,
^^^^^^^
)
^
File "<...>/venv/lib/python3.13/site-packages/pandas/io/excel/_base.py", line 768, in parse
output = self._parse_sheet(
data=data,
...<19 lines>...
**kwds,
)
File "<...>/venv/lib/python3.13/site-packages/pandas/io/excel/_base.py", line 950, in _parse_sheet
raise err
File "<...>/venv/lib/python3.13/site-packages/pandas/io/excel/_base.py", line 940, in _parse_sheet
output[asheetname].columns = output[asheetname].columns.set_names(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
header_names
^^^^^^^^^^^^
)
^
File "<...>/venv/lib/python3.13/site-packages/pandas/core/indexes/base.py", line 2051, in set_names
idx._set_names(names, level=level)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
File "<...>/venv/lib/python3.13/site-packages/pandas/core/indexes/base.py", line 1938, in _set_names
raise ValueError(f"Length of new names must be 1, got {len(values)}")
ValueError: Length of new names must be 1, got 2 (sheet: 0)
No errors.
Pandas version checks
I have checked that this issue has not already been reported.
I have confirmed this bug exists on the latest version of pandas.
I have confirmed this bug exists on the main branch of pandas.
(Part of #34766.)
test.csv
test.xlsx
Reproducible Example
Issue Description
Expected Behavior
No errors.
Installed Versions
Details
INSTALLED VERSIONS
commit : 72f2fea
python : 3.13.14
python-bits : 64
OS : Linux
OS-release : 6.18.33-calculate
Version : #1 SMP PREEMPT_DYNAMIC Tue Jun 9 10:00:56 UTC 2026
machine : x86_64
processor : Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
byteorder : little
LC_ALL : None
LANG : ru_RU.UTF-8
LOCALE : ru_RU.UTF-8
pandas : 3.0.3
numpy : 2.5.1
dateutil : 2.9.0.post0
pip : 26.1.2
Cython : None
sphinx : None
IPython : None
adbc-driver-postgresql: None
adbc-driver-sqlite : None
bs4 : None
bottleneck : None
fastparquet : None
fsspec : None
html5lib : None
hypothesis : None
gcsfs : None
jinja2 : None
lxml.etree : None
matplotlib : None
numba : None
numexpr : None
odfpy : None
openpyxl : 3.1.5
psycopg2 : None
pymysql : None
pyarrow : None
pyiceberg : None
pyreadstat : None
pytest : None
python-calamine : None
pytz : None
pyxlsb : None
s3fs : None
scipy : None
sqlalchemy : None
tables : None
tabulate : None
xarray : None
xlrd : None
xlsxwriter : None
zstandard : None
qtpy : None
pyqt5 : None