Skip to content

Commit e40c04e

Browse files
committed
BUG: Fix empty MultiIndex DataFrame xlsx export
MultiIndex on both axes, with zero rows. Fixes pandas-dev#57696
1 parent ab2980b commit e40c04e

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

pandas/io/formats/excel.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -620,7 +620,7 @@ def _format_header_mi(self) -> Iterable[ExcelCell]:
620620
lnum = 0
621621

622622
if self.index and isinstance(self.df.index, MultiIndex):
623-
coloffset = len(self.df.index[0]) - 1
623+
coloffset = self.df.index.nlevels - 1
624624

625625
if self.merge_cells:
626626
# Format multi-index as a merged cells.

pandas/tests/io/excel/test_writers.py

+10
Original file line numberDiff line numberDiff line change
@@ -936,6 +936,16 @@ def test_to_excel_empty_multiindex(self, tmp_excel):
936936
result, expected, check_index_type=False, check_dtype=False
937937
)
938938

939+
def test_to_excel_empty_multiindex_both_axes(self, tmp_excel):
940+
df = DataFrame(
941+
[],
942+
index=MultiIndex.from_tuples([], names=[0, 1]),
943+
columns=MultiIndex.from_tuples([("A", "B")]),
944+
)
945+
df.to_excel(tmp_excel)
946+
result = pd.read_excel(tmp_excel, header=None)
947+
assert result.iloc[:2, -1].to_list() == ["A", "B"]
948+
939949
def test_to_excel_float_format(self, tmp_excel):
940950
df = DataFrame(
941951
[[0.123456, 0.234567, 0.567567], [12.32112, 123123.2, 321321.2]],

0 commit comments

Comments
 (0)