pandas.api.extensions.register_dataframe_accessor#
- pandas.api.extensions.register_dataframe_accessor(name)[源代码][源代码]#
在 DataFrame 对象上注册一个自定义访问器。
- 参数:
- 名称str
访问器应注册的名称。如果此名称与预先存在的属性冲突,则会发出警告。
- 返回:
- callable
一个类装饰器。
参见
register_dataframe_accessor在 DataFrame 对象上注册一个自定义访问器。
register_series_accessor在 Series 对象上注册一个自定义访问器。
register_index_accessor在 Index 对象上注册一个自定义访问器。
备注
此函数允许您为 DataFrame 注册一个自定义的访问器类。访问器类的要求如下:
必须包含一个初始化方法,该方法:
接受一个单一的 DataFrame 对象
如果 DataFrame 对象没有正确匹配的访问器输入,则会引发 AttributeError。
必须包含每个访问模式的方法。
这些方法应该能够接受任何参数签名。
如果没有额外的参数需要,可以使用 @property 装饰器来访问。
例子
一个只接受整数的访问器可以定义这样的类:
>>> @pd.api.extensions.register_dataframe_accessor("int_accessor") ... class IntAccessor: ... def __init__(self, pandas_obj): ... if not all(pandas_obj[col].dtype == 'int64' for col in pandas_obj.columns): ... raise AttributeError("All columns must contain integer values only") ... self._obj = pandas_obj ... ... def sum(self): ... return self._obj.sum() ... >>> df = pd.DataFrame([[1, 2], ['x', 'y']]) >>> df.int_accessor Traceback (most recent call last): ... AttributeError: All columns must contain integer values only. >>> df = pd.DataFrame([[1, 2], [3, 4]]) >>> df.int_accessor.sum() 0 4 1 6 dtype: int64