pandas.api.extensions.ExtensionArray#

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

自定义一维数组类型的抽象基类。

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

Notes

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

  • _from_sequence

  • _from_factorized

  • __getitem__

  • __len__

  • __eq__

  • dtype

  • nbytes

  • isna

  • take

  • copy

  • _concat_same_type

  • interpolate

默认的 repr 显示类型、(截断的)数据、长度和 dtype。可以通过覆盖以下内容来自定义或替换它:

  • __repr__ : ExtensionArray 的默认 repr。

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

一些方法需要将 ExtensionArray 强制转换为 Python 对象数组 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 不可哈希。不可变子类可以覆盖此行为。

Examples

请参阅以下内容:

pandas-dev/pandas

Attributes

dtype 

ExtensionDtype 的一个实例。

nbytes 

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

ndim 

Extension Arrays 只允许为 1 维。

shape 

返回数组维度的元组。

Methods

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

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

astype (dtype[, copy])

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

copy ()

返回数组的副本。

dropna ()

返回不含 NA 值的 ExtensionArray。

duplicated ([keep])

返回指示重复值的布尔 ndarray。

factorize ([use_na_sentinel])

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

fillna ([value, method, limit, copy])

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

equals (other)

返回另一个数组是否等同于此数组。

insert (loc, item)

在指定位置插入一个项。

interpolate (*, method, axis, index, limit, ...)

参见 DataFrame.interpolate.__doc__。

isin (values)

用于集合包含在给定值中的逐点比较。

isna ()

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

ravel ([order])

返回数组的展平视图。

repeat (repeats[, axis])

ExtensionArray 的重复元素。

searchsorted (value[, side, sorter])

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

shift ([periods, fill_value])

按所需数量移动值。

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

从数组中提取元素。

tolist ()

返回值的列表。

unique ()

计算唯一值的 ExtensionArray。

view ([dtype])

返回数组的视图。

_accumulate (name, *[, skipna])

返回执行累积操作的 ExtensionArray。

_concat_same_type (to_concat)

连接多个相同 dtype 的数组。

_explode ()

将列表状的元素转换为一行。

_formatter ([boxed])

标量值的格式化函数。

_from_factorized (values, original)

在因子化后重新构建 ExtensionArray。

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

从标量序列构造新的 ExtensionArray。

_from_sequence_of_strings (strings, *[, ...])

从字符串序列构造新的 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 ()

返回适合因子化的数组和缺失值。