pandas.api.indexers.check_array_indexer#

pandas.api.indexers.check_array_indexer(массив, индексатор)[источник]#

Проверить, если индексатор является допустимым индексатором массива для массив.

Для булевой маски, массив и индексатор проверяются на одинаковую длину. Тип данных проверяется, и если это целочисленный или булев ExtensionArray, проверяется наличие пропущенных значений и он преобразуется в соответствующий массив numpy. Другие типы данных вызовут ошибку.

Не-массивные индексаторы (целое число, срез, многоточие, кортежи, ..) передаются как есть.

Параметры:
массивarray-like

Массив, который индексируется (используется только для длины).

индексатормассивоподобный или списокоподобный

Массивоподобный объект, используемый для индексации. Входные данные, подобные списку, которые ещё не являются массивом numpy или ExtensionArray, преобразуются в них. Другие типы входных данных передаются как есть.

Возвращает:
numpy.ndarray

Проверенный индексатор в виде массива numpy, который можно использовать для индексации.

Вызывает:
IndexError

Когда длины не совпадают.

ValueError

Когда индексатор не может быть преобразован в numpy ndarray для индексации (например, наличие пропущенных значений).

Смотрите также

api.types.is_bool_dtype

Проверить, если ключ имеет логический тип данных.

Примеры

При проверке булевой маски возвращается булев массив ndarray, когда аргументы все корректны.

>>> mask = pd.array([True, False])
>>> arr = pd.array([1, 2])
>>> pd.api.indexers.check_array_indexer(arr, mask)
array([ True, False])

Возникает IndexError, когда длины не совпадают.

>>> mask = pd.array([True, False, True])
>>> pd.api.indexers.check_array_indexer(arr, mask)
Traceback (most recent call last):
...
IndexError: Boolean index has wrong length: 3 instead of 2.

Значения NA в булевом массиве обрабатываются как False.

>>> mask = pd.array([True, pd.NA])
>>> pd.api.indexers.check_array_indexer(arr, mask)
array([ True, False])

Маска numpy типа boolean будет передана дальше (если длина правильная):

>>> mask = np.array([True, False])
>>> pd.api.indexers.check_array_indexer(arr, mask)
array([ True, False])

Аналогично для целочисленных индексаторов, целочисленный ndarray возвращается, когда это допустимый индексатор, в противном случае возникает ошибка (для целочисленных индексаторов соответствие длины не требуется):

>>> indexer = pd.array([0, 2], dtype="Int64")
>>> arr = pd.array([1, 2, 3])
>>> pd.api.indexers.check_array_indexer(arr, indexer)
array([0, 2])
>>> indexer = pd.array([0, pd.NA], dtype="Int64")
>>> pd.api.indexers.check_array_indexer(arr, indexer)
Traceback (most recent call last):
...
ValueError: Cannot index with an integer indexer containing NA values

Для нецелочисленных/небулевых dtypes возникает соответствующая ошибка:

>>> indexer = np.array([0., 2.], dtype="float64")
>>> pd.api.indexers.check_array_indexer(arr, indexer)
Traceback (most recent call last):
...
IndexError: arrays used as indices must be of integer or boolean type