Skip to content

Commit ddc3144

Browse files
authored
BUG: Fix empty MultiIndex DataFrame xlsx export (#57697)
1 parent d2bc846 commit ddc3144

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

doc/source/whatsnew/v3.0.0.rst

+1
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@ MultiIndex
325325

326326
I/O
327327
^^^
328+
- Bug in :meth:`DataFrame.to_excel` when writing empty :class:`DataFrame` with :class:`MultiIndex` on both axes (:issue:`57696`)
328329
-
329330
-
330331

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

+11
Original file line numberDiff line numberDiff line change
@@ -936,6 +936,17 @@ 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+
# GH 57696
941+
df = DataFrame(
942+
[],
943+
index=MultiIndex.from_tuples([], names=[0, 1]),
944+
columns=MultiIndex.from_tuples([("A", "B")]),
945+
)
946+
df.to_excel(tmp_excel)
947+
result = pd.read_excel(tmp_excel, header=[0, 1], index_col=[0, 1])
948+
tm.assert_frame_equal(result, df)
949+
939950
def test_to_excel_float_format(self, tmp_excel):
940951
df = DataFrame(
941952
[[0.123456, 0.234567, 0.567567], [12.32112, 123123.2, 321321.2]],

0 commit comments

Comments
 (0)