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