pandas.api.extensions.register_index_accessor#

pandas.api.extensions.register_index_accessor(имя)[источник]#

Зарегистрируйте пользовательский аксессор для объектов Index.

Параметры:
имя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