Skip to content

Commit d6b443c

Browse files
jbrockmendeljreback
authored andcommitted
Avoid accessing private loc methods (#27383)
1 parent d717ad8 commit d6b443c

File tree

3 files changed

+24
-26
lines changed

3 files changed

+24
-26
lines changed

pandas/core/frame.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -2970,7 +2970,7 @@ def __getitem__(self, key):
29702970
else:
29712971
if is_iterator(key):
29722972
key = list(key)
2973-
indexer = self.loc._convert_to_indexer(key, axis=1, raise_missing=True)
2973+
indexer = self.loc._get_listlike_indexer(key, axis=1, raise_missing=True)[1]
29742974

29752975
# take() does not accept boolean indexers
29762976
if getattr(indexer, "dtype", None) == bool:
@@ -3456,7 +3456,7 @@ def __setitem__(self, key, value):
34563456

34573457
def _setitem_slice(self, key, value):
34583458
self._check_setitem_copy()
3459-
self.loc._setitem_with_indexer(key, value)
3459+
self.loc[key] = value
34603460

34613461
def _setitem_array(self, key, value):
34623462
# also raises Exception if object array with NA values
@@ -3476,7 +3476,9 @@ def _setitem_array(self, key, value):
34763476
for k1, k2 in zip(key, value.columns):
34773477
self[k1] = value[k2]
34783478
else:
3479-
indexer = self.loc._convert_to_indexer(key, axis=1)
3479+
indexer = self.loc._get_listlike_indexer(
3480+
key, axis=1, raise_missing=False
3481+
)[1]
34803482
self._check_setitem_copy()
34813483
self.loc._setitem_with_indexer((slice(None), indexer), value)
34823484

pandas/core/indexing.py

+17-21
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ def _validate_key(self, key, axis: int):
223223
"""
224224
raise AbstractMethodError(self)
225225

226-
def _has_valid_tuple(self, key):
226+
def _has_valid_tuple(self, key: Tuple):
227227
""" check the key for valid keys across my indexer """
228228
for i, k in enumerate(key):
229229
if i >= self.obj.ndim:
@@ -236,7 +236,7 @@ def _has_valid_tuple(self, key):
236236
"[{types}] types".format(types=self._valid_types)
237237
)
238238

239-
def _is_nested_tuple_indexer(self, tup):
239+
def _is_nested_tuple_indexer(self, tup: Tuple):
240240
if any(isinstance(ax, MultiIndex) for ax in self.obj.axes):
241241
return any(is_nested_tuple(tup, ax) for ax in self.obj.axes)
242242
return False
@@ -260,7 +260,7 @@ def _convert_tuple(self, key, is_setter: bool = False):
260260
keyidx.append(idx)
261261
return tuple(keyidx)
262262

263-
def _convert_range(self, key, is_setter: bool = False):
263+
def _convert_range(self, key: range, is_setter: bool = False):
264264
""" convert a range argument """
265265
return list(key)
266266

@@ -270,7 +270,7 @@ def _convert_scalar_indexer(self, key, axis: int):
270270
# a scalar
271271
return ax._convert_scalar_indexer(key, kind=self.name)
272272

273-
def _convert_slice_indexer(self, key, axis: int):
273+
def _convert_slice_indexer(self, key: slice, axis: int):
274274
# if we are accessing via lowered dim, use the last dim
275275
ax = self.obj._get_axis(min(axis, self.ndim - 1))
276276
return ax._convert_slice_indexer(key, kind=self.name)
@@ -484,7 +484,7 @@ def setter(item, v):
484484
if is_list_like_indexer(value) and getattr(value, "ndim", 1) > 0:
485485

486486
# we have an equal len Frame
487-
if isinstance(value, ABCDataFrame) and value.ndim > 1:
487+
if isinstance(value, ABCDataFrame):
488488
sub_indexer = list(indexer)
489489
multiindex_indexer = isinstance(labels, MultiIndex)
490490

@@ -638,27 +638,23 @@ def _setitem_with_indexer_missing(self, indexer, value):
638638
self.obj._maybe_update_cacher(clear=True)
639639
return self.obj
640640

641-
def _align_series(self, indexer, ser, multiindex_indexer=False):
641+
def _align_series(self, indexer, ser: ABCSeries, multiindex_indexer: bool = False):
642642
"""
643643
Parameters
644644
----------
645645
indexer : tuple, slice, scalar
646646
The indexer used to get the locations that will be set to
647647
`ser`
648-
649648
ser : pd.Series
650649
The values to assign to the locations specified by `indexer`
651-
652650
multiindex_indexer : boolean, optional
653651
Defaults to False. Should be set to True if `indexer` was from
654652
a `pd.MultiIndex`, to avoid unnecessary broadcasting.
655653
656-
657654
Returns
658655
-------
659656
`np.array` of `ser` broadcast to the appropriate shape for assignment
660657
to the locations selected by `indexer`
661-
662658
"""
663659
if isinstance(indexer, (slice, np.ndarray, list, Index)):
664660
indexer = tuple([indexer])
@@ -734,7 +730,7 @@ def ravel(i):
734730

735731
raise ValueError("Incompatible indexer with Series")
736732

737-
def _align_frame(self, indexer, df):
733+
def _align_frame(self, indexer, df: ABCDataFrame):
738734
is_frame = self.obj.ndim == 2
739735

740736
if isinstance(indexer, tuple):
@@ -786,7 +782,7 @@ def _align_frame(self, indexer, df):
786782

787783
raise ValueError("Incompatible indexer with DataFrame")
788784

789-
def _getitem_tuple(self, tup):
785+
def _getitem_tuple(self, tup: Tuple):
790786
try:
791787
return self._getitem_lowerdim(tup)
792788
except IndexingError:
@@ -809,7 +805,7 @@ def _getitem_tuple(self, tup):
809805

810806
return retval
811807

812-
def _multi_take_opportunity(self, tup):
808+
def _multi_take_opportunity(self, tup: Tuple):
813809
"""
814810
Check whether there is the possibility to use ``_multi_take``.
815811
Currently the limit is that all axes being indexed must be indexed with
@@ -833,7 +829,7 @@ def _multi_take_opportunity(self, tup):
833829

834830
return True
835831

836-
def _multi_take(self, tup):
832+
def _multi_take(self, tup: Tuple):
837833
"""
838834
Create the indexers for the passed tuple of keys, and execute the take
839835
operation. This allows the take operation to be executed all at once -
@@ -859,7 +855,7 @@ def _multi_take(self, tup):
859855
def _convert_for_reindex(self, key, axis: int):
860856
return key
861857

862-
def _handle_lowerdim_multi_index_axis0(self, tup):
858+
def _handle_lowerdim_multi_index_axis0(self, tup: Tuple):
863859
# we have an axis0 multi-index, handle or raise
864860
axis = self.axis or 0
865861
try:
@@ -884,7 +880,7 @@ def _handle_lowerdim_multi_index_axis0(self, tup):
884880

885881
return None
886882

887-
def _getitem_lowerdim(self, tup):
883+
def _getitem_lowerdim(self, tup: Tuple):
888884

889885
# we can directly get the axis result since the axis is specified
890886
if self.axis is not None:
@@ -948,7 +944,7 @@ def _getitem_lowerdim(self, tup):
948944

949945
raise IndexingError("not applicable")
950946

951-
def _getitem_nested_tuple(self, tup):
947+
def _getitem_nested_tuple(self, tup: Tuple):
952948
# we have a nested tuple so have at least 1 multi-index level
953949
# we should be able to match up the dimensionality here
954950

@@ -1422,7 +1418,7 @@ def _getbool_axis(self, key, axis: int):
14221418
# caller is responsible for ensuring non-None axis
14231419
labels = self.obj._get_axis(axis)
14241420
key = check_bool_indexer(labels, key)
1425-
inds, = key.nonzero()
1421+
inds = key.nonzero()[0]
14261422
try:
14271423
return self.obj.take(inds, axis=axis)
14281424
except Exception as detail:
@@ -2037,7 +2033,7 @@ def _getitem_scalar(self, key):
20372033
values = self.obj._get_value(*key, takeable=True)
20382034
return values
20392035

2040-
def _validate_integer(self, key, axis):
2036+
def _validate_integer(self, key: int, axis: int):
20412037
"""
20422038
Check that 'key' is a valid position in the desired axis.
20432039
@@ -2062,7 +2058,7 @@ def _validate_integer(self, key, axis):
20622058
if key >= len_axis or key < -len_axis:
20632059
raise IndexError("single positional indexer is out-of-bounds")
20642060

2065-
def _getitem_tuple(self, tup):
2061+
def _getitem_tuple(self, tup: Tuple):
20662062

20672063
self._has_valid_tuple(tup)
20682064
try:
@@ -2160,7 +2156,7 @@ class _ScalarAccessIndexer(_NDFrameIndexer):
21602156
""" access scalars quickly """
21612157

21622158
def _convert_key(self, key, is_setter: bool = False):
2163-
return list(key)
2159+
raise AbstractMethodError(self)
21642160

21652161
def __getitem__(self, key):
21662162
if not isinstance(key, tuple):

pandas/io/pytables.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -3992,7 +3992,7 @@ def process_filter(field, filt):
39923992
filt = filt.union(Index(self.levels))
39933993

39943994
takers = op(axis_values, filt)
3995-
return obj.loc._getitem_axis(takers, axis=axis_number)
3995+
return obj.loc(axis=axis_number)[takers]
39963996

39973997
# this might be the name of a file IN an axis
39983998
elif field in axis_values:
@@ -4005,7 +4005,7 @@ def process_filter(field, filt):
40054005
if isinstance(obj, DataFrame):
40064006
axis_number = 1 - axis_number
40074007
takers = op(values, filt)
4008-
return obj.loc._getitem_axis(takers, axis=axis_number)
4008+
return obj.loc(axis=axis_number)[takers]
40094009

40104010
raise ValueError(
40114011
"cannot find the field [{field}] for "

0 commit comments

Comments
 (0)