Skip to content

Commit 3060972

Browse files
authored
REF: make Series/DataFrame _slice always positional (#31854)
1 parent d494717 commit 3060972

File tree

3 files changed

+11
-13
lines changed

3 files changed

+11
-13
lines changed

pandas/core/generic.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -3498,13 +3498,11 @@ def _iget_item_cache(self, item):
34983498
def _box_item_values(self, key, values):
34993499
raise AbstractMethodError(self)
35003500

3501-
def _slice(
3502-
self: FrameOrSeries, slobj: slice, axis=0, kind: str = "getitem"
3503-
) -> FrameOrSeries:
3501+
def _slice(self: FrameOrSeries, slobj: slice, axis=0) -> FrameOrSeries:
35043502
"""
35053503
Construct a slice of this container.
35063504
3507-
kind parameter is maintained for compatibility with Series slicing.
3505+
Slicing with this method is *always* positional.
35083506
"""
35093507
axis = self._get_block_manager_axis(axis)
35103508
result = self._constructor(self._data.get_slice(slobj, axis=axis))

pandas/core/indexing.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1146,7 +1146,7 @@ def _get_slice_axis(self, slice_obj: slice, axis: int):
11461146
)
11471147

11481148
if isinstance(indexer, slice):
1149-
return self.obj._slice(indexer, axis=axis, kind="iloc")
1149+
return self.obj._slice(indexer, axis=axis)
11501150
else:
11511151
# DatetimeIndex overrides Index.slice_indexer and may
11521152
# return a DatetimeIndex instead of a slice object.
@@ -1553,7 +1553,7 @@ def _get_slice_axis(self, slice_obj: slice, axis: int):
15531553

15541554
labels = obj._get_axis(axis)
15551555
labels._validate_positional_slice(slice_obj)
1556-
return self.obj._slice(slice_obj, axis=axis, kind="iloc")
1556+
return self.obj._slice(slice_obj, axis=axis)
15571557

15581558
def _convert_to_indexer(self, key, axis: int, is_setter: bool = False):
15591559
"""

pandas/core/series.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -840,12 +840,9 @@ def _ixs(self, i: int, axis: int = 0):
840840
"""
841841
return self._values[i]
842842

843-
def _slice(self, slobj: slice, axis: int = 0, kind: str = "getitem") -> "Series":
844-
assert kind in ["getitem", "iloc"]
845-
if kind == "getitem":
846-
# If called from getitem, we need to determine whether
847-
# this slice is positional or label-based.
848-
slobj = self.index._convert_slice_indexer(slobj, kind="getitem")
843+
def _slice(self, slobj: slice, axis: int = 0) -> "Series":
844+
# axis kwarg is retained for compat with NDFrame method
845+
# _slice is *always* positional
849846
return self._get_values(slobj)
850847

851848
def __getitem__(self, key):
@@ -889,7 +886,10 @@ def __getitem__(self, key):
889886
def _get_with(self, key):
890887
# other: fancy integer or otherwise
891888
if isinstance(key, slice):
892-
return self._slice(key, kind="getitem")
889+
# _convert_slice_indexer to determing if this slice is positional
890+
# or label based, and if the latter, convert to positional
891+
slobj = self.index._convert_slice_indexer(key, kind="getitem")
892+
return self._slice(slobj)
893893
elif isinstance(key, ABCDataFrame):
894894
raise TypeError(
895895
"Indexing a Series with DataFrame is not "

0 commit comments

Comments
 (0)