pandas.api.extensions.register_index_accessor — pandas 2.3.3 documentation (original) (raw)

pandas.api.extensions.register_index_accessor(name)[source]#

Register a custom accessor on Index objects.

Parameters:

namestr

Name under which the accessor should be registered. A warning is issued if this name conflicts with a preexisting attribute.

Returns:

callable

A class decorator.

Notes

When accessed, your accessor will be initialized with the pandas object the user is interacting with. So the signature must be

def init(self, pandas_object): # noqa: E999 ...

For consistency with pandas methods, you should raise an AttributeErrorif the data passed to your accessor has an incorrect dtype.

pd.Series(['a', 'b']).dt Traceback (most recent call last): ... AttributeError: Can only use .dt accessor with datetimelike values

Examples

In your library code:

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

Back in an interactive IPython session:

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