Skip to content

Commit 781d998

Browse files
authored
BUG: MultiIndex.dtypes to handle when no level names (pandas-dev#38582)
1 parent 4f5e40c commit 781d998

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

pandas/core/indexes/multi.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -707,7 +707,12 @@ def dtypes(self) -> "Series":
707707
"""
708708
from pandas import Series
709709

710-
return Series({level.name: level.dtype for level in self.levels})
710+
return Series(
711+
{
712+
f"level_{idx}" if level.name is None else level.name: level.dtype
713+
for idx, level in enumerate(self.levels)
714+
}
715+
)
711716

712717
@property
713718
def shape(self) -> Shape:

pandas/tests/indexes/multi/test_get_set.py

+19
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,25 @@ def test_get_dtypes():
4545
tm.assert_series_equal(expected, idx_multitype.dtypes)
4646

4747

48+
def test_get_dtypes_no_level_name():
49+
# Test MultiIndex.dtypes (# GH38580 )
50+
idx_multitype = MultiIndex.from_product(
51+
[
52+
[1, 2, 3],
53+
["a", "b", "c"],
54+
pd.date_range("20200101", periods=2, tz="UTC"),
55+
],
56+
)
57+
expected = pd.Series(
58+
{
59+
"level_0": np.dtype("int64"),
60+
"level_1": np.dtype("O"),
61+
"level_2": DatetimeTZDtype(tz="utc"),
62+
}
63+
)
64+
tm.assert_series_equal(expected, idx_multitype.dtypes)
65+
66+
4867
def test_get_level_number_out_of_bounds(multiindex_dataframe_random_data):
4968
frame = multiindex_dataframe_random_data
5069

0 commit comments

Comments
 (0)