pandas.api.indexers.check_array_indexer#
- pandas.api.indexers.check_array_indexer(array, indexer)[源代码][源代码]#
检查 indexer 是否是 array 的有效数组索引器。
对于布尔掩码,array 和 indexer 会被检查是否具有相同的长度。dtype 会被验证,如果它是整数或布尔 ExtensionArray,会检查是否存在缺失值,并将其转换为适当的 numpy 数组。其他 dtype 将引发错误。
非数组索引器(整数、切片、省略号、元组等)按原样传递。
- 参数:
- 数组array-like
正在被索引的数组(仅用于长度)。
- indexer类似数组或类似列表
用于索引的类数组对象。尚未成为 numpy 数组或 ExtensionArray 的类列表输入会被转换为其中一个。其他输入类型则按原样传递。
- 返回:
- numpy.ndarray
经过验证的索引器作为一个可以用来索引的 numpy 数组。
- 引发:
- IndexError
当长度不匹配时。
- ValueError
当 indexer 无法转换为用于索引的 numpy ndarray 时(例如存在缺失值)。
参见
api.types.is_bool_dtype
检查 key 是否为布尔数据类型。
例子
当检查一个布尔掩码时,当所有参数都有效时,会返回一个布尔型 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
对于非整数/布尔数据类型,会引发适当的错误:
>>> indexer = np.array([0.0, 2.0], 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