From 2c11c6f34a944be4527763b93c8e55434333674a Mon Sep 17 00:00:00 2001 From: guru kiran <47276342+gurukiran07@users.noreply.github.com> Date: Sat, 19 Dec 2020 19:27:09 +0530 Subject: [PATCH 1/3] multiindex dtypes to handle when no level name --- pandas/core/indexes/multi.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pandas/core/indexes/multi.py b/pandas/core/indexes/multi.py index 78e7a8516178a..5312dfe84cfd8 100644 --- a/pandas/core/indexes/multi.py +++ b/pandas/core/indexes/multi.py @@ -707,7 +707,12 @@ def dtypes(self) -> "Series": """ from pandas import Series - return Series({level.name: level.dtype for level in self.levels}) + return Series( + { + f"level_{idx}" if level.name is None else level.name: level.dtype + for idx, level in enumerate(self.levels) + } + ) @property def shape(self) -> Shape: From 92cdb141d85d7a48f28306c53411401d5d7ff4be Mon Sep 17 00:00:00 2001 From: guru kiran <47276342+gurukiran07@users.noreply.github.com> Date: Sat, 19 Dec 2020 19:29:15 +0530 Subject: [PATCH 2/3] tests for mi with no level names --- pandas/tests/indexes/multi/test_get_set.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/pandas/tests/indexes/multi/test_get_set.py b/pandas/tests/indexes/multi/test_get_set.py index 83cebf90623fe..91a018d63d8d5 100644 --- a/pandas/tests/indexes/multi/test_get_set.py +++ b/pandas/tests/indexes/multi/test_get_set.py @@ -45,6 +45,25 @@ def test_get_dtypes(): tm.assert_series_equal(expected, idx_multitype.dtypes) +def test_get_dtypes_no_level_name(): + # Test MultiIndex.dtypes (# GH38580 ) + idx_multitype = MultiIndex.from_product( + [ + [1, 2, 3], + ["a", "b", "c"], + pd.date_range("20200101", periods=2, tz="UTC"), + ], + ) + expected = pd.Series( + { + "level_0": np.dtype("int64"), + "level_1": np.dtype("O"), + "level_2": DatetimeTZDtype(tz="utc"), + } + ) + tm.assert_series_equal(expected, idx_multitype.dtypes) + + def test_get_level_number_out_of_bounds(multiindex_dataframe_random_data): frame = multiindex_dataframe_random_data From 120be8b4d5c612f159e9bee3819efda11a636ac3 Mon Sep 17 00:00:00 2001 From: guru kiran <47276342+gurukiran07@users.noreply.github.com> Date: Sat, 19 Dec 2020 19:35:40 +0530 Subject: [PATCH 3/3] pep-8 fixes --- pandas/tests/indexes/multi/test_get_set.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pandas/tests/indexes/multi/test_get_set.py b/pandas/tests/indexes/multi/test_get_set.py index 91a018d63d8d5..d43ee3330ef08 100644 --- a/pandas/tests/indexes/multi/test_get_set.py +++ b/pandas/tests/indexes/multi/test_get_set.py @@ -61,9 +61,9 @@ def test_get_dtypes_no_level_name(): "level_2": DatetimeTZDtype(tz="utc"), } ) - tm.assert_series_equal(expected, idx_multitype.dtypes) - - + tm.assert_series_equal(expected, idx_multitype.dtypes) + + def test_get_level_number_out_of_bounds(multiindex_dataframe_random_data): frame = multiindex_dataframe_random_data