Skip to content

CLN: _convert_list_indexer only called by Loc #31599

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 5, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 4 additions & 27 deletions pandas/core/indexes/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@
from pandas.core.arrays import ExtensionArray
from pandas.core.base import IndexOpsMixin, PandasObject
import pandas.core.common as com
from pandas.core.indexers import deprecate_ndim_indexing, maybe_convert_indices
from pandas.core.indexers import deprecate_ndim_indexing
from pandas.core.indexes.frozen import FrozenList
import pandas.core.missing as missing
from pandas.core.ops import get_op_result_name
Expand Down Expand Up @@ -3211,7 +3211,7 @@ def is_int(v):

return indexer

def _convert_listlike_indexer(self, keyarr, kind=None):
def _convert_listlike_indexer(self, keyarr):
"""
Parameters
----------
Expand All @@ -3230,7 +3230,7 @@ def _convert_listlike_indexer(self, keyarr, kind=None):
else:
keyarr = self._convert_arr_indexer(keyarr)

indexer = self._convert_list_indexer(keyarr, kind=kind)
indexer = self._convert_list_indexer(keyarr)
return indexer, keyarr

def _convert_arr_indexer(self, keyarr):
Expand Down Expand Up @@ -3264,7 +3264,7 @@ def _convert_index_indexer(self, keyarr):
"""
return keyarr

def _convert_list_indexer(self, keyarr, kind=None):
def _convert_list_indexer(self, keyarr):
"""
Convert a list-like indexer to the appropriate dtype.

Expand All @@ -3278,29 +3278,6 @@ def _convert_list_indexer(self, keyarr, kind=None):
-------
positional indexer or None
"""
if (
kind in [None, "iloc"]
and is_integer_dtype(keyarr)
and not self.is_floating()
):

if self.inferred_type == "mixed-integer":
indexer = self.get_indexer(keyarr)
if (indexer >= 0).all():
return indexer
# missing values are flagged as -1 by get_indexer and negative
# indices are already converted to positive indices in the
# above if-statement, so the negative flags are changed to
# values outside the range of indices so as to trigger an
# IndexError in maybe_convert_indices
indexer[indexer < 0] = len(self)

return maybe_convert_indices(indexer, len(self))

elif not self.inferred_type == "integer":
keyarr = np.where(keyarr < 0, len(self) + keyarr, keyarr)
return keyarr
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This code was never reached?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

correct. it cannot be reached in the current code


return None

def _invalid_indexer(self, form: str_t, key):
Expand Down
4 changes: 2 additions & 2 deletions pandas/core/indexes/category.py
Original file line number Diff line number Diff line change
Expand Up @@ -678,12 +678,12 @@ def _convert_scalar_indexer(self, key, kind=None):
return super()._convert_scalar_indexer(key, kind=kind)

@Appender(Index._convert_list_indexer.__doc__)
def _convert_list_indexer(self, keyarr, kind=None):
def _convert_list_indexer(self, keyarr):
# Return our indexer or raise if all of the values are not included in
# the categories

if self.categories._defer_to_indexing:
indexer = self.categories._convert_list_indexer(keyarr, kind=kind)
indexer = self.categories._convert_list_indexer(keyarr)
return Index(self.codes).get_indexer_for(indexer)

indexer = self.categories.get_indexer(np.asarray(keyarr))
Expand Down
2 changes: 1 addition & 1 deletion pandas/core/indexes/interval.py
Original file line number Diff line number Diff line change
Expand Up @@ -537,7 +537,7 @@ def _maybe_cast_slice_bound(self, label, side, kind):
return getattr(self, side)._maybe_cast_slice_bound(label, side, kind)

@Appender(Index._convert_list_indexer.__doc__)
def _convert_list_indexer(self, keyarr, kind=None):
def _convert_list_indexer(self, keyarr):
"""
we are passed a list-like indexer. Return the
indexer for matching intervals.
Expand Down
4 changes: 2 additions & 2 deletions pandas/core/indexes/multi.py
Original file line number Diff line number Diff line change
Expand Up @@ -2375,7 +2375,7 @@ def _try_mi(k):

raise InvalidIndexError(key)

def _convert_listlike_indexer(self, keyarr, kind=None):
def _convert_listlike_indexer(self, keyarr):
"""
Parameters
----------
Expand All @@ -2388,7 +2388,7 @@ def _convert_listlike_indexer(self, keyarr, kind=None):
indexer is an ndarray or None if cannot convert
keyarr are tuple-safe keys
"""
indexer, keyarr = super()._convert_listlike_indexer(keyarr, kind=kind)
indexer, keyarr = super()._convert_listlike_indexer(keyarr)

# are we indexing a specific level
if indexer is None and len(keyarr) and not isinstance(keyarr[0], tuple):
Expand Down
3 changes: 2 additions & 1 deletion pandas/core/indexing.py
Original file line number Diff line number Diff line change
Expand Up @@ -1459,7 +1459,8 @@ def _get_listlike_indexer(self, key, axis: int, raise_missing: bool = False):

# Have the index compute an indexer or return None
# if it cannot handle:
indexer, keyarr = ax._convert_listlike_indexer(key, kind=self.name)
assert self.name == "loc"
indexer, keyarr = ax._convert_listlike_indexer(key)
# We only act on all found values:
if indexer is not None and (indexer != -1).all():
self._validate_read_indexer(key, indexer, axis, raise_missing=raise_missing)
Expand Down