From cafc71fe05ed53a69ba9201645f296ef46c27479 Mon Sep 17 00:00:00 2001 From: Brock Date: Tue, 15 Jun 2021 17:49:04 -0700 Subject: [PATCH 1/2] BUG: MultiIndex.reindex with level and EA dtype --- pandas/core/indexes/multi.py | 4 +--- pandas/tests/indexes/multi/test_reindex.py | 7 +++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/pandas/core/indexes/multi.py b/pandas/core/indexes/multi.py index 4dff63ea22e00..8a8cadcbf54ec 100644 --- a/pandas/core/indexes/multi.py +++ b/pandas/core/indexes/multi.py @@ -2503,9 +2503,7 @@ def reindex( target = ibase.ensure_has_len(target) if len(target) == 0 and not isinstance(target, Index): idx = self.levels[level] - attrs = idx._get_attributes_dict() - attrs.pop("freq", None) # don't preserve freq - target = type(idx)._simple_new(np.empty(0, dtype=idx.dtype), **attrs) + target = idx[:0] else: target = ensure_index(target) target, indexer, _ = self._join_level( diff --git a/pandas/tests/indexes/multi/test_reindex.py b/pandas/tests/indexes/multi/test_reindex.py index 38ff6efec40c9..d9c77c5bdcd60 100644 --- a/pandas/tests/indexes/multi/test_reindex.py +++ b/pandas/tests/indexes/multi/test_reindex.py @@ -84,6 +84,13 @@ def test_reindex_lvl_preserves_type_if_target_is_empty_list_or_array(): assert idx.reindex([], level=0)[0].levels[0].dtype.type == np.int64 assert idx.reindex([], level=1)[0].levels[1].dtype.type == np.object_ + # case with EA levels + cat = pd.Categorical(["foo", "bar"]) + dti = pd.date_range("2016-01-01", periods=2, tz="US/Pacific") + mi = MultiIndex.from_product([cat, dti]) + assert mi.reindex([], level=0)[0].levels[0].dtype == cat.dtype + assert mi.reindex([], level=1)[0].levels[1].dtype == dti.dtype + def test_reindex_base(idx): idx = idx From d1ee15302d51c9a35c6da82fd74ad6e1f92241ba Mon Sep 17 00:00:00 2001 From: Brock Date: Wed, 16 Jun 2021 08:07:06 -0700 Subject: [PATCH 2/2] whatsnew --- doc/source/whatsnew/v1.4.0.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/whatsnew/v1.4.0.rst b/doc/source/whatsnew/v1.4.0.rst index 166ea2f0d4164..9859f12a34621 100644 --- a/doc/source/whatsnew/v1.4.0.rst +++ b/doc/source/whatsnew/v1.4.0.rst @@ -167,7 +167,7 @@ Missing MultiIndex ^^^^^^^^^^ -- +- Bug in :meth:`MultiIndex.reindex` when passing a ``level`` that corresponds to an ``ExtensionDtype`` level (:issue:`42043`) - I/O