Skip to content

Commit 5bcfef0

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

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
@@ -324,6 +324,7 @@ MultiIndex
324324

325325
I/O
326326
^^^
327+
- Bug in :class:`io.formats.excel.ExcelFormatter` when writing empty :class:`DataFrame` with :class:`MultiIndex` on both axes (:issue:`57696`)
327328
-
328329
-
329330

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=None)
948+
assert result.iloc[:2, -1].to_list() == ["A", "B"]
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)