
Работа с данными в Pandas иногда требует специфических преобразований, которые не реализованы стандартными методами. Для этого можно применять пользовательские функции. В Pandas есть удобный метод apply(), который позволяет применять любую функцию к данным.
Метод apply() можно использовать как для DataFrame, так и для Series.
Пример на Series:
import pandas as pd
s = pd.Series([1, 2, 3, 4])
s_squared = s.apply(lambda x: x**2)
print(s_squared)
# 0 1
# 1 4
# 2 9
# 3 16
# dtype: int64Пример на DataFrame:
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# Применяем функцию ко всем элементам DataFrame
df_squared = df.apply(lambda x: x**2)
print(df_squared)
# A B
# 0 1 16
# 1 4 25
# 2 9 36В примерах выше была использована lambda-функция. Это анонимная функция, объявленная с помощью ключевого слова lambda. Она может иметь любое количество аргументов, но только одно выражение.
Пример:
f = lambda x: x + 10
print(f(5)) # Выведет 15Метод apply() позволяет передавать дополнительные аргументы в функцию:
s = pd.Series([1, 2, 3, 4])
def multiplier(x, factor):
return x * factor
s_multiplied = s.apply(multiplier, factor=3)
print(s_multiplied)
# 0 3
# 1 6
# 2 9
# 3 12
# dtype: int64По умолчанию apply() применяется к столбцам DataFrame. Однако можно изменить это поведение, передав аргумент axis.
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# Применение функции к строкам
summed = df.apply(sum, axis=1)
print(summed)
# 0 3
# 1 6
# 2 9
# 3 12
# dtype: int64Функция, переданная в apply(), может возвращать несколько значений, которые затем преобразуются в DataFrame.
df = pd.DataFrame({
'fullname': ['John Smith', 'Jane Doe']
})
def split_name(name):
first, last = name.split()
return pd.Series((first, last), index=['first_name', 'last_name'])
names = df['fullname'].apply(split_name)
print(names)
# first_name last_name
# 0 John Smith
# 1 Jane DoeВы можете комбинировать apply() с другими методами Pandas для создания сложных вычислительных цепочек.
# Нахождение максимального значения в каждом столбце, затем его квадрат
max_squared = df.apply(max).apply(lambda x: x**2)Вы можете использовать lambda с несколькими аргументами, особенно полезно при работе с методом apply() для DataFrame.
df = pd.DataFrame({
'Length': [5, 6, 7],
'Width': [8, 9, 10]
})
df['Area'] = df.apply(lambda row: row['Length'] * row['Width'], axis=1)
print(df)Метод apply() и lambda-функции дают громадную гибкость при работе с данными в Pandas. Используя их, вы можете легко создавать кастомные функции и применять их к вашим данным для получения необходимых результатов. Однако следует быть аккуратным: чрезмерное использование apply() может сделать код менее читаемым и менее эффективным по производительности. Но в умелых руках это мощный инструмент.
Содержание: