pandas.api.extensions.register_dataframe_accessor
- pandas.api.extensions.register_dataframe_accessor(name)[source]
-
Регистрация пользовательского аксессора для объектов DataFrame.
- Параметры:
-
- name:str
-
Имя, под которым аксессор должен быть зарегистрирован. Если имя конфликтует с существующим атрибутом, выводится предупреждение.
- Возвращаемое значение:
-
- callable
-
Декоратор класса.
См. также
register_dataframe_accessor-
Регистрация пользовательского аксессора для объектов DataFrame.
register_series_accessor-
Регистрация пользовательского аксессора для объектов Series.
register_index_accessor-
Регистрация пользовательского аксессора для объектов Index.
Примечания
При обращении к вашему аксессору он будет инициализирован с объектом pandas, с которым пользователь взаимодействует. Следовательно, сигнатура должна быть
def __init__(self, pandas_object): # noqa: E999 ...Для согласованности с методами pandas следует поднимать исключение
AttributeErrorесли тип данных, переданный вашему аксессору, имеет неправильный тип.>>> 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
© 2008–2022, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/2.2.2/reference/api/pandas.api.extensions.register_dataframe_accessor.html