pandas.api.indexers.check_array_indexer
- pandas.api.indexers.check_array_indexer(array, indexer)[source]
-
Проверка, является ли
indexerдопустимым индексатором массиваarray.Для булевой маски проверяется, что
arrayиindexerимеют одинаковую длину. Проверяется тип данных, и если это целочисленный или булевый расширенный массив (ExtensionArray), проверяется наличие пропущенных значений, а затем он преобразуется в соответствующий массив NumPy. Другие типы данных вызовут ошибку.Индексаторы, которые не являются массивами (целые числа, срезы, Ellipsis, кортежи и т. д.), передаются как есть.
Добавлен в версии 1.0.0.
- Parameters
-
- array:array-like
-
Массив, который индексируется (используется только для проверки длины).
- indexer:array-like или list-like
-
Вектор-подобный объект, используемый для индексирования. Список-подобный ввод, который еще не является массивом NumPy или расширенным массивом, преобразуется в один. Другие типы входных данных передаются как есть.
- Returns
-
- numpy.ndarray
-
Проверенный индексатор в виде массива NumPy, который можно использовать для индексирования.
- Raises
-
- IndexError
-
Если длины не совпадают.
- ValueError
-
Если
indexerнельзя преобразовать в массив NumPy для индексирования (например, присутствуют пропущенные значения).
См. также
api.types.is_bool_dtype-
Проверка, является ли
keyбулевого типа.
Примеры
При проверке булевой маски возвращается булевый массив NumPy, когда все аргументы корректны.
>>> 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 будет передана (если длина правильная):
>>> mask = np.array([True, False]) >>> pd.api.indexers.check_array_indexer(arr, mask) array([ True, False])
Аналогично для целочисленных индексаторов, целочисленный массив NumPy возвращается, если это допустимый индексатор, в противном случае возникает ошибка (для целочисленных индексаторов не требуется совпадение длины):
>>> 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
Для типов данных, не являющихся целыми числами/булевыми, поднимается соответствующая ошибка:
>>> 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
© 2008–2022, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/1.5.0/reference/api/pandas.api.indexers.check_array_indexer.html