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