pandas.api.extensions.register_series_accessor#
- pandas.api.extensions.register_series_accessor(имя)[источник]#
Зарегистрировать пользовательский аксессор на объектах Series.
- Параметры:
- имяstr
Имя, под которым должен быть зарегистрирован аксессор. Выдается предупреждение, если это имя конфликтует с уже существующим атрибутом.
- Возвращает:
- callable
Декоратор класса.
Смотрите также
register_dataframe_accessorЗарегистрировать пользовательский аксессор на объектах DataFrame.
register_series_accessorЗарегистрировать пользовательский аксессор на объектах Series.
register_index_accessorЗарегистрируйте пользовательский аксессор для объектов Index.
Примечания
При обращении ваш аксессор будет инициализирован объектом pandas, с которым взаимодействует пользователь. Поэтому сигнатура должна быть
def __init__(self, pandas_object): # noqa: E999 ...
Для согласованности с методами pandas следует вызывать
AttributeErrorесли данные, переданные вашему аксессору, имеют некорректный dtype.>>> 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