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.