pandas.api.extensions.register_index_accessor#

pandas.api.extensions.register_index_accessor(name)[源代码][源代码]#

在 Index 对象上注册一个自定义访问器。

参数:
名字str

访问器应注册的名称。如果此名称与预先存在的属性冲突,则会发出警告。

返回:
callable

一个类装饰器。

参见

register_dataframe_accessor

在 DataFrame 对象上注册一个自定义访问器。

register_series_accessor

在 Series 对象上注册一个自定义访问器。

register_index_accessor

在 Index 对象上注册一个自定义访问器。

备注

此函数允许您为 Index 注册一个自定义的访问器类。访问器类的要求如下:

  • 必须包含一个初始化方法,该方法:

    • 接受一个单一的索引对象

    • 如果 Index 对象没有正确匹配的输入给访问器,则会引发 AttributeError

  • 必须包含每个访问模式的方法。

    • 这些方法应该能够接受任何参数签名。

    • 如果没有额外的参数需要,可以使用 @property 装饰器来访问。

示例

一个只接受整数的访问器可以定义如下类:

>>> @pd.api.extensions.register_index_accessor("int_accessor")
... class IntAccessor:
...     def __init__(self, pandas_obj):
...         if not all(isinstance(x, int) for x in pandas_obj):
...             raise AttributeError("The index must only be an integer value")
...         self._obj = pandas_obj
...
...     def even(self):
...         return [x for x in self._obj if x % 2 == 0]
>>> df = pd.DataFrame.from_dict(
...     {"row1": {"1": 1, "2": "a"}, "row2": {"1": 2, "2": "b"}}, orient="index"
... )
>>> df.index.int_accessor
Traceback (most recent call last):
...
AttributeError: The index must only be an integer value.
>>> df = pd.DataFrame(
...     {"col1": [1, 2, 3, 4], "col2": ["a", "b", "c", "d"]}, index=[1, 2, 5, 8]
... )
>>> df.index.int_accessor.even()
[2, 8]