From b1138a44775eb4b8a8df83b03011893f0e9ede56 Mon Sep 17 00:00:00 2001 From: Brock Date: Sun, 4 Jul 2021 20:49:09 -0700 Subject: [PATCH] REF: disambiguate get_loc_level k variable --- pandas/core/generic.py | 18 ++++++------------ pandas/core/indexes/multi.py | 29 ++++++++++++++++++----------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 4019ef8537294..52ca253f92028 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -3765,18 +3765,12 @@ class animal locomotion self._consolidate_inplace() if isinstance(index, MultiIndex): - try: - loc, new_index = index._get_loc_level(key, level=0) - except TypeError as err: - raise TypeError( - f"Expected label or tuple of labels, got {key}" - ) from err - else: - if not drop_level: - if lib.is_integer(loc): - new_index = index[loc : loc + 1] - else: - new_index = index[loc] + loc, new_index = index._get_loc_level(key, level=0) + if not drop_level: + if lib.is_integer(loc): + new_index = index[loc : loc + 1] + else: + new_index = index[loc] else: loc = index.get_loc(key) diff --git a/pandas/core/indexes/multi.py b/pandas/core/indexes/multi.py index 04592e319f7ed..05580b03feba1 100644 --- a/pandas/core/indexes/multi.py +++ b/pandas/core/indexes/multi.py @@ -2988,6 +2988,7 @@ def maybe_mi_droplevels(indexer, levels): if isinstance(key, tuple) and level == 0: try: + # Check if this tuple is a single key in our first level if key in self.levels[0]: indexer = self._get_level_indexer(key, level=level) new_index = maybe_mi_droplevels(indexer, [0]) @@ -3021,19 +3022,25 @@ def maybe_mi_droplevels(indexer, levels): indexer = None for i, k in enumerate(key): if not isinstance(k, slice): - k = self._get_level_indexer(k, level=i) - if isinstance(k, slice): - # everything - if k.start == 0 and k.stop == len(self): - k = slice(None, None) + loc_level = self._get_level_indexer(k, level=i) + if isinstance(loc_level, slice): + if com.is_null_slice(loc_level) or com.is_full_slice( + loc_level, len(self) + ): + # everything + continue + else: + raise TypeError( + f"Expected label or tuple of labels, got {key}" + ) else: - k_index = k + k_index = loc_level - if isinstance(k, slice): - if k == slice(None, None): - continue - else: - raise TypeError(key) + elif com.is_null_slice(k): + # taking everything, does not affect `indexer` below + continue + else: + raise TypeError(f"Expected label or tuple of labels, got {key}") if indexer is None: indexer = k_index