pandas.api.extensions.register_dataframe_accessor # pandas.api.扩展。register_dataframe_accessor ( name ) [来源] # 在 DataFrame 对象上注册自定义访问器。 参数: 名称字符串访问者应注册的名称。如果该名称与预先存在的属性冲突,则会发出警告。 返回: 可调用的一个类装饰器。 也可以看看 register_dataframe_accessor在 DataFrame 对象上注册自定义访问器。 register_series_accessor在 Series 对象上注册自定义访问器。 register_index_accessor在 Index 对象上注册自定义访问器。 笔记 访问时,您的访问器将使用用户正在交互的 pandas 对象进行初始化。所以签名必须是 def __init__(self, pandas_object): # noqa: E999 ... AttributeError 为了与 pandas 方法保持一致,如果传递给访问器的数据的数据类型不正确,则应引发 an错误。 >>> pd.Series(['a', 'b']).dt Traceback (most recent call last): ... AttributeError: Can only use .dt accessor with datetimelike values 例子 在您的库代码中: import pandas as pd @pd.api.extensions.register_dataframe_accessor("geo") class GeoAccessor: def __init__(self, pandas_obj): self._obj = pandas_obj @property def center(self): # return the geographic center point of this DataFrame lat = self._obj.latitude lon = self._obj.longitude return (float(lon.mean()), float(lat.mean())) def plot(self): # plot this array's data on a map, e.g., using Cartopy pass 返回交互式 IPython 会话: In [1]: ds = pd.DataFrame({"longitude": np.linspace(0, 10), ...: "latitude": np.linspace(0, 20)}) In [2]: ds.geo.center Out[2]: (5.0, 10.0) In [3]: ds.geo.plot() # plots data on a map