From 7258e346d10535fa4040bad55cc2d4a832d376bb Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Sun, 2 Feb 2020 18:57:01 -0800 Subject: [PATCH] CLN: convert_list_indexer is always kind=loc --- pandas/core/indexes/base.py | 31 ++++--------------------------- pandas/core/indexes/category.py | 4 ++-- pandas/core/indexes/interval.py | 2 +- pandas/core/indexes/multi.py | 4 ++-- pandas/core/indexing.py | 3 ++- pandas/core/series.py | 5 +++-- 6 files changed, 14 insertions(+), 35 deletions(-) diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index d8b6457464ed3..6aaca702c88c7 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -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 @@ -3212,7 +3212,7 @@ def is_int(v): return indexer - def _convert_listlike_indexer(self, keyarr, kind=None): + def _convert_listlike_indexer(self, keyarr): """ Parameters ---------- @@ -3231,7 +3231,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): @@ -3265,7 +3265,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. @@ -3279,29 +3279,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 - return None def _invalid_indexer(self, form: str_t, key): diff --git a/pandas/core/indexes/category.py b/pandas/core/indexes/category.py index 2cdf47ad61cec..8df4a447e1f44 100644 --- a/pandas/core/indexes/category.py +++ b/pandas/core/indexes/category.py @@ -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)) diff --git a/pandas/core/indexes/interval.py b/pandas/core/indexes/interval.py index a665e4df00219..0252a13665b84 100644 --- a/pandas/core/indexes/interval.py +++ b/pandas/core/indexes/interval.py @@ -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. diff --git a/pandas/core/indexes/multi.py b/pandas/core/indexes/multi.py index c560d81ba95f6..95511858b0cd9 100644 --- a/pandas/core/indexes/multi.py +++ b/pandas/core/indexes/multi.py @@ -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 ---------- @@ -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): diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 77003719360d9..1aa3e1dbd4499 100755 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -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) diff --git a/pandas/core/series.py b/pandas/core/series.py index bfe9969daaa8e..040fcf392733b 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -23,6 +23,7 @@ from pandas._config import get_option from pandas._libs import lib, properties, reshape, tslibs +from pandas._libs.index import validate_numeric_casting from pandas._typing import Label from pandas.compat.numpy import function as nv from pandas.util._decorators import Appender, Substitution @@ -1022,7 +1023,7 @@ def __setitem__(self, key, value): def _set_with_engine(self, key, value): # fails with AttributeError for IntervalIndex loc = self.index._engine.get_loc(key) - libindex.validate_numeric_casting(self.dtype, value) + validate_numeric_casting(self.dtype, value) self._values[loc] = value def _set_with(self, key, value): @@ -1105,7 +1106,7 @@ def _set_value(self, label, value, takeable: bool = False): self._values[label] = value else: loc = self.index.get_loc(label) - libindex.validate_numeric_casting(self.dtype, value) + validate_numeric_casting(self.dtype, value) self._values[loc] = value except KeyError: