Skip to content

Commit 8b4f973

Browse files
jbrockmendeljreback
authored andcommitted
REF: define _get_slice_axis in correct classes (#31304)
1 parent 6f93898 commit 8b4f973

File tree

1 file changed

+31
-32
lines changed

1 file changed

+31
-32
lines changed

pandas/core/indexing.py

Lines changed: 31 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1662,16 +1662,6 @@ def _convert_to_indexer(self, key, axis: int):
16621662
return {"key": key}
16631663
raise
16641664

1665-
def _get_slice_axis(self, slice_obj: slice, axis: int):
1666-
# caller is responsible for ensuring non-None axis
1667-
obj = self.obj
1668-
1669-
if not need_slice(slice_obj):
1670-
return obj.copy(deep=False)
1671-
1672-
indexer = self._convert_slice_indexer(slice_obj, axis)
1673-
return self._slice(indexer, axis=axis, kind="iloc")
1674-
16751665

16761666
class _LocationIndexer(_NDFrameIndexer):
16771667
_takeable: bool = False
@@ -1706,27 +1696,6 @@ def _getbool_axis(self, key, axis: int):
17061696
inds = key.nonzero()[0]
17071697
return self.obj.take(inds, axis=axis)
17081698

1709-
def _get_slice_axis(self, slice_obj: slice, axis: int):
1710-
"""
1711-
This is pretty simple as we just have to deal with labels.
1712-
"""
1713-
# caller is responsible for ensuring non-None axis
1714-
obj = self.obj
1715-
if not need_slice(slice_obj):
1716-
return obj.copy(deep=False)
1717-
1718-
labels = obj._get_axis(axis)
1719-
indexer = labels.slice_indexer(
1720-
slice_obj.start, slice_obj.stop, slice_obj.step, kind=self.name
1721-
)
1722-
1723-
if isinstance(indexer, slice):
1724-
return self._slice(indexer, axis=axis, kind="iloc")
1725-
else:
1726-
# DatetimeIndex overrides Index.slice_indexer and may
1727-
# return a DatetimeIndex instead of a slice object.
1728-
return self.obj.take(indexer, axis=axis)
1729-
17301699

17311700
@Appender(IndexingMixin.loc.__doc__)
17321701
class _LocIndexer(_LocationIndexer):
@@ -1881,14 +1850,34 @@ def _getitem_axis(self, key, axis: int):
18811850
self._validate_key(key, axis)
18821851
return self._get_label(key, axis=axis)
18831852

1853+
def _get_slice_axis(self, slice_obj: slice, axis: int):
1854+
"""
1855+
This is pretty simple as we just have to deal with labels.
1856+
"""
1857+
# caller is responsible for ensuring non-None axis
1858+
obj = self.obj
1859+
if not need_slice(slice_obj):
1860+
return obj.copy(deep=False)
1861+
1862+
labels = obj._get_axis(axis)
1863+
indexer = labels.slice_indexer(
1864+
slice_obj.start, slice_obj.stop, slice_obj.step, kind=self.name
1865+
)
1866+
1867+
if isinstance(indexer, slice):
1868+
return self._slice(indexer, axis=axis, kind="iloc")
1869+
else:
1870+
# DatetimeIndex overrides Index.slice_indexer and may
1871+
# return a DatetimeIndex instead of a slice object.
1872+
return self.obj.take(indexer, axis=axis)
1873+
18841874

18851875
@Appender(IndexingMixin.iloc.__doc__)
18861876
class _iLocIndexer(_LocationIndexer):
18871877
_valid_types = (
18881878
"integer, integer slice (START point is INCLUDED, END "
18891879
"point is EXCLUDED), listlike of integers, boolean array"
18901880
)
1891-
_get_slice_axis = _NDFrameIndexer._get_slice_axis
18921881
_takeable = True
18931882

18941883
def _validate_key(self, key, axis: int):
@@ -2051,6 +2040,16 @@ def _getitem_axis(self, key, axis: int):
20512040

20522041
return self._get_loc(key, axis=axis)
20532042

2043+
def _get_slice_axis(self, slice_obj: slice, axis: int):
2044+
# caller is responsible for ensuring non-None axis
2045+
obj = self.obj
2046+
2047+
if not need_slice(slice_obj):
2048+
return obj.copy(deep=False)
2049+
2050+
indexer = self._convert_slice_indexer(slice_obj, axis)
2051+
return self._slice(indexer, axis=axis, kind="iloc")
2052+
20542053
def _convert_to_indexer(self, key, axis: int):
20552054
"""
20562055
Much simpler as we only have to deal with our valid types.

0 commit comments

Comments
 (0)