DataFrame.apply() / Series.apply()

Метод apply() применяет переданную функцию вдоль оси DataFrame или к элементам Series. Один из самых гибких инструментов для пользовательских преобразований.

Сигнатура

DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)
Series.apply(func, convert_dtype=True, args=(), **kwargs)

Параметры

  • func — функция или lambda.

  • axis — 0 (передавать столбцы) или 1 (передавать строки).

  • raw — если True, передаётся ndarray, а не Series.

  • result_type — "expand", "reduce" или "broadcast".

  • args, **kwargs — параметры для func.

Возвращаемое значение

Series или DataFrame, в зависимости от func и оси.

Примеры

Пример 1. Простое преобразование Series

import pandas as pd

s = pd.Series([1, 2, 3])
print(s.apply(lambda x: x ** 2))
0    1
1    4
2    9
dtype: int64

Пример 2. Перевод аналоговых отсчётов в вольты

ADC Arduino возвращает 0–1023, переводим в вольты (5В опорное):

import pandas as pd

raw = pd.Series([512, 1023, 256, 0])
volts = raw.apply(lambda x: x * 5.0 / 1023)
print(volts.round(2))
0    2.50
1    5.00
2    1.25
3    0.00
dtype: float64

Пример 3. Применение по столбцам

import pandas as pd

df = pd.DataFrame({"a": [1, 2, 3], "b": [10, 20, 30]})
print(df.apply(sum))
a     6
b    60
dtype: int64

Пример 4. Применение по строкам

import pandas as pd

df = pd.DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})
print(df.apply(lambda row: row["x"] + row["y"], axis=1))
0    5
1    7
2    9
dtype: int64

Пример 5. Возврат Series (расширение в столбцы)

import pandas as pd

s = pd.Series([10, 20, 30])
print(s.apply(lambda x: pd.Series([x, x * 2], index=["one", "two"])))
   one  two
0   10   20
1   20   40
2   30   60

См. также

Примечание

Лицензия и источники

Техническое описание функции адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Примеры и пояснения — © AlashEd Wiki.