pandas.api.extensions.ExtensionArray.take#

ExtensionArray.take(indices, *, allow_fill=False, fill_value=None)[源代码][源代码]#

从数组中取出元素。

参数:
索引int 序列或一维的 np.ndarray 的 int

待处理的索引。

allow_fill布尔值, 默认为 False

如何处理 indices 中的负值。

  • False: indices 中的负值表示从右边开始的位置索引(默认)。这与 numpy.take() 类似。

  • True: indices 中的负值表示缺失值。这些值被设置为 fill_value。任何其他负值都会引发 ValueError

fill_value任意, 可选

allow_fill 为 True 时,用于 NA 索引的填充值。这可以是 None,在这种情况下,将使用该类型的默认 NA 值,即 self.dtype.na_value

对于许多 ExtensionArrays,将会有两种 fill_value 的表示:面向用户的“装箱”标量和低级别的物理 NA 值。fill_value 应该是面向用户的版本,并且实现应该在必要时处理将其转换为物理版本以进行处理。

返回:
ExtensionArray

由选定的 indices 形成的数组。

引发:
IndexError

当索引超出数组的边界时。

ValueError

indices 包含除了 -1 以外的负值且 allow_fill 为 True 时。

参见

numpy.take

沿轴从数组中提取元素。

api.extensions.take

从数组中取出元素。

备注

ExtensionArray.take 由 Series.__getitem__.lociloc 调用,当 indices 是一个值序列时。此外,它由 Series.reindex() 调用,或任何其他导致重新对齐的方法,带有 fill_value

例子

这是一个示例实现,它依赖于将扩展数组转换为对象数据类型。这使用了辅助方法 pandas.api.extensions.take()

def take(self, indices, allow_fill=False, fill_value=None):
    from pandas.core.algorithms import take

    # If the ExtensionArray is backed by an ndarray, then
    # just pass that here instead of coercing to object.
    data = self.astype(object)

    if allow_fill and fill_value is None:
        fill_value = self.dtype.na_value

    # fill value should always be translated from the scalar
    # type for the array, to the physical storage type for
    # the data, before passing to take.

    result = take(data, indices, fill_value=fill_value, allow_fill=allow_fill)
    return self._from_sequence(result, dtype=self.dtype)