diff --git a/pandas/core/indexes/datetimes.py b/pandas/core/indexes/datetimes.py index 9712a5d95a234..8a181e856b27f 100644 --- a/pandas/core/indexes/datetimes.py +++ b/pandas/core/indexes/datetimes.py @@ -722,7 +722,7 @@ def _maybe_cast_slice_bound(self, label, side: str, kind=lib.no_default): if self._is_strictly_monotonic_decreasing and len(self) > 1: return upper if side == "left" else lower return lower if side == "left" else upper - elif isinstance(label, (self._data._recognized_scalars, date)): + elif isinstance(label, self._data._recognized_scalars): self._deprecate_mismatched_indexing(label) else: raise self._invalid_indexer("slice", label) @@ -800,6 +800,13 @@ def check_str_or_none(point): else: return indexer + @doc(Index.get_slice_bound) + def get_slice_bound(self, label, side: str, kind=None) -> int: + # GH#42855 handle date here instead of _maybe_cast_slice_bound + if isinstance(label, date) and not isinstance(label, datetime): + label = Timestamp(label).to_pydatetime() + return super().get_slice_bound(label, side=side, kind=kind) + # -------------------------------------------------------------------- @property diff --git a/pandas/tests/indexes/datetimes/test_indexing.py b/pandas/tests/indexes/datetimes/test_indexing.py index d705fa7f0ed2c..6eaf799ae2779 100644 --- a/pandas/tests/indexes/datetimes/test_indexing.py +++ b/pandas/tests/indexes/datetimes/test_indexing.py @@ -746,7 +746,7 @@ def test_get_slice_bounds_datetime_within( result = index.get_slice_bound(key, kind=kind, side=side) assert result == expected - @pytest.mark.parametrize("box", [date, datetime, Timestamp]) + @pytest.mark.parametrize("box", [datetime, Timestamp]) @pytest.mark.parametrize("kind", ["getitem", "loc", None]) @pytest.mark.parametrize("side", ["left", "right"]) @pytest.mark.parametrize("year, expected", [(1999, 0), (2020, 30)]) @@ -764,7 +764,7 @@ def test_get_slice_bounds_datetime_outside( result = index.get_slice_bound(key, kind=kind, side=side) assert result == expected - @pytest.mark.parametrize("box", [date, datetime, Timestamp]) + @pytest.mark.parametrize("box", [datetime, Timestamp]) @pytest.mark.parametrize("kind", ["getitem", "loc", None]) def test_slice_datetime_locs(self, box, kind, tz_aware_fixture): # GH 34077