pandas.api.extensions.register_series_accessor#

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

Register a custom accessor on Series 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.

See also

register_dataframe_accessor

Register a custom accessor on DataFrame objects.

register_series_accessor

Register a custom accessor on Series objects.

register_index_accessor

Register a custom accessor on Index objects.

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 AttributeError if 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:

importpandasaspd
@pd.api.extensions.register_dataframe_accessor("geo")
classGeoAccessor:
 def__init__(self, pandas_obj):
 self._obj = pandas_obj
 @property
 defcenter(self):
 # return the geographic center point of this DataFrame
 lat = self._obj.latitude
 lon = self._obj.longitude
 return (float(lon.mean()), float(lat.mean()))
 defplot(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