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