Spec-Zone.ru › pandas 2

pandas.DataFrame.apply

DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), by_row='compat', engine='python', engine_kwargs=None, **kwargs)[source]

Применение функции вдоль оси DataFrame.

Объекты, передаваемые в функцию, являются объектами Series, индекс которых — либо индекс DataFrame (axis=0), либо столбцы DataFrame (axis=1). По умолчанию (result_type=None) конечный тип возвращаемого значения определяется по типу возвращаемого значения применённой функции. В противном случае, он зависит от аргумента result_type.

Параметры:
func:функция

Функция, применяемая к каждому столбцу или строке.

axis:{0 или ‘index’, 1 или ‘columns’}, по умолчанию 0

Ось, по которой применяется функция:

  • 0 или ‘index’: применение функции к каждому столбцу.

  • 1 или ‘columns’: применение функции к каждой строке.

raw:bool, по умолчанию False

Определяет, передаётся ли строка или столбец как объект Series или ndarray:

  • False : передаёт каждую строку или столбец в функцию как объект Series.

  • True : передаваемая функция будет получать объекты ndarray. Если вы просто применяете функцию NumPy для сокращения, это обеспечит значительно лучшую производительность.

result_type:{‘expand’, ‘reduce’, ‘broadcast’, None}, по умолчанию None

Эти параметры действуют только при axis=1 (столбцы):

  • ‘expand’ : результаты в виде списков преобразуются в столбцы.

  • ‘reduce’ : если это возможно, возвращает Series, а не расширяет результаты в виде списков. Это противоположно ‘expand’.

  • ‘broadcast’ : результаты будут транслированы к исходной форме DataFrame, исходный индекс и столбцы будут сохранены.

Поведение по умолчанию (None) зависит от возвращаемого значения применяемой функции: результаты в виде списков возвращаются как Series. Однако, если применяемая функция возвращает Series, они расширяются до столбцов.

args:кортеж

Позиционные аргументы для передачи функции func дополнительно к массиву/ряду.

by_row:False или “compat”, по умолчанию “compat”

Оказывает влияние только когда func является спископодобным или словареподобным объектом функций, и функция не является строкой. Если “compat”, то, если возможно, функция будет преобразована в методы pandas (например, Series().apply(np.sum) будет преобразована в Series().sum()). Если это не сработает, будет снова вызвана функция apply с by_row=True и, если это также не сработает, функция apply будет вызвана ещё раз с by_row=False (обратная совместимость). Если False, функциям будет сразу передан весь ряд.

Добавлена в версии 2.1.0.

engine:{‘python’, ‘numba’}, по умолчанию ‘python’

Выбор между движком python (по умолчанию) и движком numba для применения.

Движок numba попытается скомпилировать переданную функцию JIT, что может привести к ускорению для больших DataFrame. Он также поддерживает следующие engine_kwargs :

  • nopython (скомпилировать функцию в режиме nopython)

  • nogil (освободить GIL внутри скомпилированной JIT функции)

  • parallel (попытаться применить функцию параллельно по DataFrame)

    Примечание: Из-за ограничений в numba/как pandas взаимодействует с numba, следует использовать только в случае raw=True

Примечание: компилятор numba поддерживает только подмножество допустимых операций Python/numpy.

Для получения более подробной информации о поддерживаемых функциях Python и NumPy в numba обратитесь к поддерживаемым функциям Python и поддерживаемым функциям NumPy в numba.

Добавлена в версии 2.2.0.

engine_kwargs:словарь

Передача ключевых аргументов в движок. В настоящее время используется только движком numba, см. документацию к аргументу engine для получения дополнительной информации.

**kwargs

Дополнительные ключевые аргументы для передачи как ключевых аргументов функции func.

Возвращаемое значение:
Series или DataFrame

Результат применения func вдоль заданной оси DataFrame.

См. также

DataFrame.map

Для элементных операций.

DataFrame.aggregate

Выполнение только агрегирующих операций.

DataFrame.transform

Выполнение только преобразовательных операций.

Примечания

Функции, изменяющие переданный объект, могут привести к неожиданному поведению или ошибкам и не поддерживаются. Подробнее см. Изменение значений с помощью пользовательских определённых функций (UDF).

Примеры

>>> df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
>>> df
   A  B
0  4  9
1  4  9
2  4  9

Использование универсальной функции NumPy (в данном случае эквивалентно np.sqrt(df)):

>>> df.apply(np.sqrt)
     A    B
0  2.0  3.0
1  2.0  3.0
2  2.0  3.0

Использование сокращающей функции по одной из осей

>>> df.apply(np.sum, axis=0)
A    12
B    27
dtype: int64
>>> df.apply(np.sum, axis=1)
0    13
1    13
2    13
dtype: int64

Возврат списка приведет к Series

>>> df.apply(lambda x: [1, 2], axis=1)
0    [1, 2]
1    [1, 2]
2    [1, 2]
dtype: object

Передача result_type='expand' расширит результаты в виде списка в столбцы DataFrame

>>> df.apply(lambda x: [1, 2], axis=1, result_type='expand')
   0  1
0  1  2
1  1  2
2  1  2

Возврат Series внутри функции аналогичен передаче result_type='expand'. Имена получившихся столбцов будут индексом Series.

>>> df.apply(lambda x: pd.Series([1, 2], index=['foo', 'bar']), axis=1)
   foo  bar
0    1    2
1    1    2
2    1    2

Передача result_type='broadcast' гарантирует получение результата той же формы, независимо от того, возвращается ли функцией список или скалярное значение, и транслирует его вдоль оси. Имена получившихся столбцов будут исходными.

>>> df.apply(lambda x: [1, 2], axis=1, result_type='broadcast')
   A  B
0  1  2
1  1  2
2  1  2

© 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.DataFrame.apply.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API