pandas.api.extensions.ExtensionArray#
- class pandas.api.extensions.ExtensionArray[源代码][源代码]#
自定义1-D数组类型的抽象基类。
pandas 将识别此类实例为具有自定义类型的适当数组,并且不会尝试将它们强制转换为对象。它们可以直接存储在
DataFrame
或Series
中。属性
ExtensionDtype 的一个实例。
存储此对象在内存中所需的字节数。
扩展数组仅允许是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])返回执行归约操作的标量结果。
排序的返回值。
返回一个适合因式分解的数组和缺失值。
参见
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 期望的是当 inputs 中存在任何 Series 时,您可以通过返回
NotImplemented
来推迟操作。Pandas 将提取数组并再次调用 ufunc。你在类上定义一个
_HANDLED_TYPES
元组作为属性。Pandas 检查这个以确定 ufunc 是否对当前类型有效。
更多信息请参见 NumPy 通用函数。
默认情况下,ExtensionArrays 是不可哈希的。不可变子类可以覆盖此行为。
例子
请参见以下内容: