Spec-Zone.ru › pandas 0.23

pandas.DataFrame.apply

DataFrame.apply(func, axis=0, broadcast=None, raw=False, reduce=None, result_type=None, args=(), **kwds) [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’: применяет функцию к каждой строке.

broadcast : bool, необязательно

Актуально только для агрегирующих функций:

  • False или None : возвращает Series, длина которого равна длине индекса или количеству столбцов (в зависимости от параметра axis)
  • True : результаты будут транслироваться к исходной форме фрейма, исходный индекс и столбцы будут сохранены.

Устарело начиная с версии 0.23.0: Этот аргумент будет удален в будущей версии, заменён на result_type=’broadcast’.

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

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

reduce : bool или None, по умолчанию None

Попытка применить процедуры сокращения. Если DataFrame пустой, apply будет использовать reduce для определения, должно ли быть результатом Series или DataFrame. Если reduce=None (значение по умолчанию), apply значение возврата будет определено путем вызова func на пустой Series (примечание: при определении исключения, генерируемые func, будут игнорироваться). Если reduce=True, всегда будет возвращена Series, а если reduce=False, всегда будет возвращен DataFrame.

Устарело начиная с версии 0.23.0: Этот аргумент будет удалён в будущей версии, заменён на result_type='reduce'.

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

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

  • ‘expand’ : списочные результаты будут преобразованы в столбцы.
  • ‘reduce’ : возвращает Series, если возможно, а не расширяет списочные результаты. Это противоположность ‘expand’.
  • ‘broadcast’ : результаты будут транслироваться к исходной форме DataFrame, исходный индекс и столбцы будут сохранены.

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

Введено в версии 0.23.0.

args : кортеж

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

**kwds

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

Возвращает:
applied : Series or DataFrame

См. также

DataFrame.applymap
Для поэлементных операций
DataFrame.aggregate
только выполнять агрегирующие типы операций
DataFrame.transform
только выполнять преобразования типов операций

Примечания

В текущей реализации apply вызывает func дважды для первого столбца/строки, чтобы решить, может ли он использовать быстрый или медленный путь кода. Это может привести к неожиданному поведению, если у func есть побочные эффекты, поскольку они будут действовать дважды для первого столбца/строки.

Примеры

>>> 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–2012, 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/0.23.4/generated/pandas.DataFrame.apply.html

Spec-Zone.ru

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