pandas.api.extensions.ExtensionArray#

class pandas.api.extensions.ExtensionArray[源代码][源代码]#

自定义1-D数组类型的抽象基类。

pandas 将识别此类实例为具有自定义类型的适当数组,并且不会尝试将它们强制转换为对象。它们可以直接存储在 DataFrameSeries 中。

属性

dtype

ExtensionDtype 的一个实例。

nbytes

存储此对象在内存中所需的字节数。

ndim

扩展数组仅允许是1维的。

形状

返回数组维度的元组。

方法

argsort(*[, ascending, kind, na_position])

返回可以对此数组进行排序的索引。

astype(dtype[, copy])

转换为带有 'dtype' 的 NumPy 数组或 ExtensionArray。

复制()

返回数组的副本。

dropna()

返回不包含 NA 值的 ExtensionArray。

重复项([keep])

返回表示重复值的布尔型 ndarray。

factorize([use_na_sentinel])

将扩展数组编码为枚举类型。

fillna(value[, limit, copy])

使用指定方法填充 NA/NaN 值。

等于(其他)

如果另一个数组与此数组等效,则返回。

插入(loc, item)

在给定位置插入一个项目。

插值(*, method, axis, index, limit, ...)

请参阅 DataFrame.interpolate.__doc__。

isin(values)

在给定值中逐点比较集合的包含关系。

isna()

一个1维数组,指示每个值是否缺失。

ravel([order])

返回此数组的扁平化视图。

repeat(repeats[, axis])

重复 ExtensionArray 的元素。

searchsorted(value[, side, sorter])

查找元素应插入以保持顺序的索引。

shift([periods, fill_value])

按所需数量移动值。

take(indices, *[, allow_fill, fill_value])

从数组中获取元素。

tolist()

返回一个值的列表。

唯一()

计算唯一值的 ExtensionArray。

视图([dtype])

返回数组的一个视图。

_accumulate(name, *[, skipna])

返回一个执行累积操作的 ExtensionArray。

_concat_same_type(to_concat)

连接多个此数据类型的数组。

_explode()

将列表类中的每个元素转换为一行。

_formatter([boxed])

标量值的格式化函数。

_from_factorized(values, original)

在因子化后重建一个 ExtensionArray。

_from_sequence(scalars, *[, dtype, copy])

从一系列标量构造一个新的 ExtensionArray。

_from_sequence_of_strings(strings, *, dtype)

从字符串序列构建一个新的 ExtensionArray。

_hash_pandas_object(*, encoding, hash_key, ...)

用于 hash_pandas_object 的钩子。

_pad_or_backfill(*, method[, limit, ...])

填充或回填值,由 Series/DataFrame 的 ffill 和 bfill 使用。

_reduce(name, *[, skipna, keepdims])

返回执行归约操作的标量结果。

_values_for_argsort()

排序的返回值。

_values_for_factorize()

返回一个适合因式分解的数组和缺失值。

参见

api.extensions.ExtensionDtype

一个自定义数据类型,与一个 ExtensionArray 配对。

api.extensions.ExtensionArray.dtype

ExtensionDtype 的一个实例。

备注

该接口包括以下必须由子类实现的抽象方法:

  • _from_sequence

  • _from_factorized

  • __getitem__

  • __len__

  • __eq__

  • dtype

  • nbytes

  • isna

  • copy

  • _concat_same_type

  • interpolate

提供了一个默认的 repr,显示类型、(截断的)数据、长度和 dtype。可以通过重写以下内容来自定义或替换:

  • __repr__ : ExtensionArray 的默认 repr。

  • _formatter : 在 Series 或 DataFrame 中打印标量。

一些方法需要将 ExtensionArray 转换为 Python 对象的 ndarray,使用 self.astype(object),这可能会很昂贵。当性能是一个问题时,我们强烈建议重写以下方法:

  • fillna

  • _pad_or_backfill

  • dropna

  • unique

  • factorize / _values_for_factorize

  • argsort, argmax, argmin / _values_for_argsort

  • searchsorted

  • map

此类实现的其余方法应该高效,因为它们只组合了抽象方法。尽管如此,可能存在更高效的实现,这些方法可以被重写。

可以实现处理数组累积或归约的方法。

  • _accumulate

  • _reduce

可以实现方法来处理从字符串解析,这些字符串将用于诸如 pandas.io.parsers.read_csv 的方法中。

  • _from_sequence_of_strings

出于性能原因,此类不继承自 ‘abc.ABCMeta’。接口所需的方法和属性会引发 pandas.errors.AbstractMethodError,并且没有提供 register 方法用于注册虚拟子类。

ExtensionArrays 被限制为 1 维。

它们可能由零个、一个或多个 NumPy 数组支持。例如,pandas.Categorical 是一个由两个数组支持的扩展数组,一个用于代码,一个用于类别。一个 IPv6 地址数组可能由一个包含两个字段的 NumPy 结构化数组支持,一个用于较低的 64 位,一个用于较高的 64 位。或者它们可能由其他存储类型支持,如 Python 列表。Pandas 不对数据的存储方式做任何假设,只是它可以转换为 NumPy 数组。ExtensionArray 接口对数据的存储方式没有任何规定。然而,目前,支持数据不能存储在名为 .values._values 的属性中,以确保与 pandas 内部完全兼容。但其他名称如 .data._data._items 等可以自由使用。

如果实现 NumPy 的 __array_ufunc__ 接口,pandas 期望的是

  1. inputs 中存在任何 Series 时,您可以通过返回 NotImplemented 来推迟操作。Pandas 将提取数组并再次调用 ufunc。

  2. 你在类上定义一个 _HANDLED_TYPES 元组作为属性。Pandas 检查这个以确定 ufunc 是否对当前类型有效。

更多信息请参见 NumPy 通用函数

默认情况下,ExtensionArrays 是不可哈希的。不可变子类可以覆盖此行为。

例子

请参见以下内容:

pandas-dev/pandas