pandas.DataFrame.apply#
- DataFrame.apply(функция, ось=0, raw=False, result_type=None, args=(), by_row='compat', движок='python', engine_kwargs=None, **kwargs)[источник]#
Применить функцию вдоль оси DataFrame.
Объекты, передаваемые функции, являются объектами Series, чей индекс — либо индекс DataFrame (
axis=0) или столбцы DataFrame (axis=1). По умолчанию (result_type=None), окончательный тип возвращаемого значения выводится из типа возвращаемого значения примененной функции. В противном случае, это зависит от result_type аргумент.- Параметры:
- функцияфункция
Функция для применения к каждому столбцу или строке.
- ось{0 или 'index', 1 или 'columns'}, по умолчанию 0
Ось, вдоль которой применяется функция:
0 или 'index': применяет функцию к каждому столбцу.
1 или 'columns': применяет функцию к каждой строке.
- rawbool, по умолчанию 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кортеж
Позиционные аргументы для передачи в функция в дополнение к массиву/серии.
- by_rowFalse или “compat”, по умолчанию “compat”
Имеет эффект только когда
funcявляется списком или словарем функций и функция не является строкой. Если "compat", по возможности сначала переведет функцию в методы pandas (например,Series().apply(np.sum)будет преобразовано вSeries().sum()). Если это не сработает, будет предпринята повторная попытка вызова apply сby_row=Trueи если это не удастся, вызовет apply снова сby_row=False(обратно совместимо). Если False, функции будут передаваться весь Series целиком.Добавлено в версии 2.1.0.
- движок{‘python’, ‘numba’}, по умолчанию ‘python’
Выбрать между движком python (по умолчанию) или движком numba в apply.
Движок numba попытается JIT-скомпилировать переданную функцию, что может привести к ускорению для больших DataFrame. Он также поддерживает следующие engine_kwargs:
nopython (компиляция функции в режиме nopython)
nogil (освобождение GIL внутри JIT-скомпилированной функции)
параллельно (попытка применить функцию параллельно по DataFrame)
Примечание: Из-за ограничений в numba/способах взаимодействия pandas с numba, вы должны использовать это только если raw=True
Примечание: компилятор numba поддерживает только подмножество допустимых операций Python/numpy.
Подробнее читайте о поддерживаемые возможности python и поддерживаемые возможности numpy в numba, чтобы узнать, что можно или нельзя использовать в переданной функции.
Добавлено в версии 2.2.0.
- engine_kwargsdict
Передача аргументов ключевых слов в движок. В настоящее время это используется только движком numba, см. документацию по аргументу engine для получения дополнительной информации.
- **kwargs
Дополнительные ключевые аргументы для передачи в качестве аргументов ключевых слов в функция.
- Возвращает:
- 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