diff --git a/pandas/core/indexes/multi.py b/pandas/core/indexes/multi.py index f7b42bce631f5..b4e8a763d1210 100644 --- a/pandas/core/indexes/multi.py +++ b/pandas/core/indexes/multi.py @@ -2836,7 +2836,7 @@ def _maybe_to_slice(loc): try: return self._engine.get_loc(key) except TypeError: - # e.g. partial string slicing + # e.g. test_partial_slicing_with_multiindex partial string slicing loc, _ = self.get_loc_level(key, list(range(self.nlevels))) return loc diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 9884fae7e5624..3b42d1c4505da 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -658,16 +658,7 @@ def _get_setitem_indexer(self, key): if isinstance(key, range): return list(key) - try: - return self._convert_to_indexer(key, axis=0, is_setter=True) - except TypeError as e: - - # invalid indexer type vs 'other' indexing errors - if "cannot do" in str(e): - raise - elif "unhashable type" in str(e): - raise - raise IndexingError(key) from e + return self._convert_to_indexer(key, axis=0, is_setter=True) def _ensure_listlike_indexer(self, key, axis=None, value=None): """ @@ -1209,7 +1200,7 @@ def _convert_to_indexer(self, key, axis: int, is_setter: bool = False): is_int_index = labels.is_integer() is_int_positional = is_integer(key) and not is_int_index - if is_scalar(key) or isinstance(labels, MultiIndex): + if is_scalar(key) or (isinstance(labels, MultiIndex) and is_hashable(key)): # Otherwise get_loc will raise InvalidIndexError # if we are a label return me @@ -1224,8 +1215,6 @@ def _convert_to_indexer(self, key, axis: int, is_setter: bool = False): # GH35015, using datetime as column indices raises exception if not isinstance(labels, MultiIndex): raise - except TypeError: - pass except ValueError: if not is_int_positional: raise