Skip to content

Commit 40c2d4d

Browse files
authored
Series.__repr__ with MultiIndex with level name 0 (#55415)
* Series.__repr__ with MultiIndex with level name 0 * GH ref
1 parent c18ae3b commit 40c2d4d

File tree

3 files changed

+14
-12
lines changed

3 files changed

+14
-12
lines changed

doc/source/whatsnew/v2.2.0.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,8 @@ Styler
390390
Other
391391
^^^^^
392392
- Bug in :func:`cut` incorrectly allowing cutting of timezone-aware datetimes with timezone-naive bins (:issue:`54964`)
393+
- Bug in rendering a :class:`Series` with a :class:`MultiIndex` when one of the index level's names is 0 not having that name displayed (:issue:`55415`)
394+
-
393395

394396
.. ***DO NOT USE THIS SECTION***
395397

pandas/io/formats/format.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -298,17 +298,6 @@ def _get_footer(self) -> str:
298298

299299
return str(footer)
300300

301-
def _get_formatted_index(self) -> tuple[list[str], bool]:
302-
index = self.tr_series.index
303-
304-
if isinstance(index, MultiIndex):
305-
have_header = any(name for name in index.names)
306-
fmt_index = index.format(names=True)
307-
else:
308-
have_header = index.name is not None
309-
fmt_index = index.format(name=True)
310-
return fmt_index, have_header
311-
312301
def _get_formatted_values(self) -> list[str]:
313302
return format_array(
314303
self.tr_series._values,
@@ -325,7 +314,8 @@ def to_string(self) -> str:
325314
if len(series) == 0:
326315
return f"{type(self.series).__name__}([], {footer})"
327316

328-
fmt_index, have_header = self._get_formatted_index()
317+
have_header = _has_names(series.index)
318+
fmt_index = self.tr_series.index.format(name=True)
329319
fmt_values = self._get_formatted_values()
330320

331321
if self.is_truncated_vertically:

pandas/tests/series/test_repr.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@
2121

2222

2323
class TestSeriesRepr:
24+
def test_multilevel_name_print_0(self):
25+
# GH#55415 None does not get printed, but 0 does
26+
# (matching DataFrame and flat index behavior)
27+
mi = pd.MultiIndex.from_product([range(2, 3), range(3, 4)], names=[0, None])
28+
ser = Series(1.5, index=mi)
29+
30+
res = repr(ser)
31+
expected = "0 \n2 3 1.5\ndtype: float64"
32+
assert res == expected
33+
2434
def test_multilevel_name_print(self, lexsorted_two_level_string_multiindex):
2535
index = lexsorted_two_level_string_multiindex
2636
ser = Series(range(len(index)), index=index, name="sth")

0 commit comments

Comments
 (0)