pandas.api.indexers.check_array_indexer#

pandas.api.indexers.check_array_indexer(array, indexer)[源代码]#

检查 indexer 是否是 array 的有效数组索引器。

对于布尔掩码,会检查 arrayindexer 是否具有相同的长度。验证 dtype,如果它是整数或布尔 ExtensionArray,则检查是否存在缺失值,并将其转换为适当的 numpy 数组。其他 dtype 将引发错误。

非数组索引器(整数、切片、省略号、元组等)将按原样传递。

Parameters:
array类数组

正在索引的数组(仅用于长度)。

indexer数组状或列表状

用作索引的数组状对象。列表状输入(尚未成为 numpy 数组或 ExtensionArray)将被转换为一个。其他输入类型将按原样传递。

Returns:
numpy.ndarray

经过验证的索引器,作为 numpy 数组,可用于索引。

Raises:
IndexError

当长度不匹配时。

ValueError

indexer 无法转换为 numpy ndarray 进行索引时(例如,存在缺失值)。

参见

api.types.is_bool_dtype

检查 key 的 dtype 是否为布尔型。

Examples

当检查布尔掩码时,如果所有参数都有效,则返回一个布尔 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 布尔掩码将被直接传递(如果长度正确):

>>> 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

对于非整数/布尔 dtype,会引发相应的错误:

>>> 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