Skip to content

Commit 204b7e3

Browse files
jbrockmendelquintusdias
authored andcommitted
CLN: simplify indexing code (pandas-dev#27604)
1 parent 56167f0 commit 204b7e3

File tree

3 files changed

+24
-37
lines changed

3 files changed

+24
-37
lines changed

pandas/core/indexing.py

+16-28
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ def _slice(self, obj, axis: int, kind=None):
164164

165165
def _get_setitem_indexer(self, key):
166166
if self.axis is not None:
167-
return self._convert_tuple(key, is_setter=True)
167+
return self._convert_tuple(key)
168168

169169
ax = self.obj._get_axis(0)
170170

@@ -176,7 +176,7 @@ def _get_setitem_indexer(self, key):
176176

177177
if isinstance(key, tuple):
178178
try:
179-
return self._convert_tuple(key, is_setter=True)
179+
return self._convert_tuple(key)
180180
except IndexingError:
181181
pass
182182

@@ -185,7 +185,7 @@ def _get_setitem_indexer(self, key):
185185

186186
axis = self.axis or 0
187187
try:
188-
return self._convert_to_indexer(key, axis=axis, is_setter=True)
188+
return self._convert_to_indexer(key, axis=axis)
189189
except TypeError as e:
190190

191191
# invalid indexer type vs 'other' indexing errors
@@ -241,22 +241,20 @@ def _is_nested_tuple_indexer(self, tup: Tuple):
241241
return any(is_nested_tuple(tup, ax) for ax in self.obj.axes)
242242
return False
243243

244-
def _convert_tuple(self, key, is_setter: bool = False):
244+
def _convert_tuple(self, key):
245245
keyidx = []
246246
if self.axis is not None:
247247
axis = self.obj._get_axis_number(self.axis)
248248
for i in range(self.ndim):
249249
if i == axis:
250-
keyidx.append(
251-
self._convert_to_indexer(key, axis=axis, is_setter=is_setter)
252-
)
250+
keyidx.append(self._convert_to_indexer(key, axis=axis))
253251
else:
254252
keyidx.append(slice(None))
255253
else:
256254
for i, k in enumerate(key):
257255
if i >= self.ndim:
258256
raise IndexingError("Too many indexers")
259-
idx = self._convert_to_indexer(k, axis=i, is_setter=is_setter)
257+
idx = self._convert_to_indexer(k, axis=i)
260258
keyidx.append(idx)
261259
return tuple(keyidx)
262260

@@ -1184,9 +1182,7 @@ def _validate_read_indexer(
11841182
if not (ax.is_categorical() or ax.is_interval()):
11851183
warnings.warn(_missing_key_warning, FutureWarning, stacklevel=6)
11861184

1187-
def _convert_to_indexer(
1188-
self, obj, axis: int, is_setter: bool = False, raise_missing: bool = False
1189-
):
1185+
def _convert_to_indexer(self, obj, axis: int, raise_missing: bool = False):
11901186
"""
11911187
Convert indexing key into something we can use to do actual fancy
11921188
indexing on an ndarray
@@ -1210,10 +1206,8 @@ def _convert_to_indexer(
12101206
try:
12111207
obj = self._convert_scalar_indexer(obj, axis)
12121208
except TypeError:
1213-
12141209
# but we will allow setting
1215-
if is_setter:
1216-
pass
1210+
pass
12171211

12181212
# see if we are positional in nature
12191213
is_int_index = labels.is_integer()
@@ -1224,7 +1218,7 @@ def _convert_to_indexer(
12241218
return labels.get_loc(obj)
12251219
except LookupError:
12261220
if isinstance(obj, tuple) and isinstance(labels, MultiIndex):
1227-
if is_setter and len(obj) == labels.nlevels:
1221+
if len(obj) == labels.nlevels:
12281222
return {"key": obj}
12291223
raise
12301224
except TypeError:
@@ -1238,17 +1232,14 @@ def _convert_to_indexer(
12381232

12391233
# if we are setting and its not a valid location
12401234
# its an insert which fails by definition
1241-
if is_setter:
12421235

1236+
if self.name == "loc":
12431237
# always valid
1244-
if self.name == "loc":
1245-
return {"key": obj}
1238+
return {"key": obj}
12461239

1240+
if obj >= self.obj.shape[axis] and not isinstance(labels, MultiIndex):
12471241
# a positional
1248-
if obj >= self.obj.shape[axis] and not isinstance(labels, MultiIndex):
1249-
raise ValueError(
1250-
"cannot set by positional indexing with enlargement"
1251-
)
1242+
raise ValueError("cannot set by positional indexing with enlargement")
12521243

12531244
return obj
12541245

@@ -1263,14 +1254,13 @@ def _convert_to_indexer(
12631254
return inds
12641255
else:
12651256
# When setting, missing keys are not allowed, even with .loc:
1266-
kwargs = {"raise_missing": True if is_setter else raise_missing}
1267-
return self._get_listlike_indexer(obj, axis, **kwargs)[1]
1257+
return self._get_listlike_indexer(obj, axis, raise_missing=True)[1]
12681258
else:
12691259
try:
12701260
return labels.get_loc(obj)
12711261
except LookupError:
12721262
# allow a not found key only if we are a setter
1273-
if not is_list_like_indexer(obj) and is_setter:
1263+
if not is_list_like_indexer(obj):
12741264
return {"key": obj}
12751265
raise
12761266

@@ -2127,9 +2117,7 @@ def _getitem_axis(self, key, axis: int):
21272117
return self._get_loc(key, axis=axis)
21282118

21292119
# raise_missing is included for compat with the parent class signature
2130-
def _convert_to_indexer(
2131-
self, obj, axis: int, is_setter: bool = False, raise_missing: bool = False
2132-
):
2120+
def _convert_to_indexer(self, obj, axis: int, raise_missing: bool = False):
21332121
""" much simpler as we only have to deal with our valid types """
21342122

21352123
# make need to convert a float key

pandas/core/series.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1077,7 +1077,7 @@ def _ixs(self, i: int, axis: int = 0):
10771077
else:
10781078
return values[i]
10791079

1080-
def _slice(self, slobj, axis=0, kind=None):
1080+
def _slice(self, slobj: slice, axis: int = 0, kind=None):
10811081
slobj = self.index._convert_slice_indexer(slobj, kind=kind or "getitem")
10821082
return self._get_values(slobj)
10831083

pandas/core/sparse/series.py

+7-8
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
from pandas.core import generic
2121
from pandas.core.arrays import SparseArray
2222
from pandas.core.arrays.sparse import SparseAccessor
23-
from pandas.core.index import Index
2423
from pandas.core.internals import SingleBlockManager
2524
import pandas.core.ops as ops
2625
from pandas.core.series import Series
@@ -318,23 +317,23 @@ def _set_subtyp(self, is_all_dates):
318317
# ----------------------------------------------------------------------
319318
# Indexing Methods
320319

321-
def _ixs(self, i, axis=0):
320+
def _ixs(self, i: int, axis: int = 0):
322321
"""
323322
Return the i-th value or values in the SparseSeries by location
324323
325324
Parameters
326325
----------
327-
i : int, slice, or sequence of integers
326+
i : int
327+
axis: int
328+
default 0, ignored
328329
329330
Returns
330331
-------
331332
value : scalar (int) or Series (slice, sequence)
332333
"""
333-
label = self.index[i]
334-
if isinstance(label, Index):
335-
return self.take(i, axis=axis)
336-
else:
337-
return self._get_val_at(i)
334+
assert is_integer(i), i
335+
# equiv: self._get_val_at(i) since we have an integer
336+
return self.values[i]
338337

339338
def _get_val_at(self, loc):
340339
""" forward to the array """

0 commit comments

Comments
 (0)