diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index 7b7b234a06eca..6d9d45b2cde71 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -3462,6 +3462,18 @@ def get_indexer( # Only call equals if we have same dtype to avoid inference/casting return np.arange(len(target), dtype=np.intp) + if not is_dtype_equal(self.dtype, target.dtype) and not is_interval_dtype( + self.dtype + ): + # IntervalIndex gets special treatment for partial-indexing + dtype = self._find_common_type_compat(target) + + this = self.astype(dtype, copy=False) + target = target.astype(dtype, copy=False) + return this._get_indexer( + target, method=method, limit=limit, tolerance=tolerance + ) + return self._get_indexer(target, method, limit, tolerance) def _get_indexer( @@ -3474,15 +3486,6 @@ def _get_indexer( if tolerance is not None: tolerance = self._convert_tolerance(tolerance, target) - if not is_dtype_equal(self.dtype, target.dtype): - dtype = self._find_common_type_compat(target) - - this = self.astype(dtype, copy=False) - target = target.astype(dtype, copy=False) - return this.get_indexer( - target, method=method, limit=limit, tolerance=tolerance - ) - if method in ["pad", "backfill"]: indexer = self._get_fill_indexer(target, method, limit, tolerance) elif method == "nearest": diff --git a/pandas/core/indexes/range.py b/pandas/core/indexes/range.py index 8bef105c783c8..2a9608c62a6d3 100644 --- a/pandas/core/indexes/range.py +++ b/pandas/core/indexes/range.py @@ -409,10 +409,6 @@ def _get_indexer( reverse = self._range[::-1] start, stop, step = reverse.start, reverse.stop, reverse.step - if not is_signed_integer_dtype(target): - # checks/conversions/roundings are delegated to general method - return super()._get_indexer(target, method=method, tolerance=tolerance) - target_array = np.asarray(target) locs = target_array - start valid = (locs % step == 0) & (locs >= 0) & (target_array < stop)