pandas dataframe apply函数
Pandas 是一个强大的 Python 数据分析工具库,它提供了许多用于操作数据的功能,其中 apply
函数是一个非常有用的工具,它允许用户对 DataFrame 或 Series 中的数据应用一个函数。本文将详细介绍 apply
函数的使用方法,并通过多个示例代码展示其在不同场景下的应用。
1. apply 函数基础
apply
函数可以被用于 pandas 的 Series 和 DataFrame 对象。当用于 DataFrame 时,你可以沿着行或列应用一个函数。使用 apply
的基本语法如下:
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwds)
func
: 要应用的函数axis
: 默认为0,意味着函数应用于每一列。设置为1时,函数将应用于每一行。raw
: 默认为False,意味着传递给函数的是pandas对象。如果为True,则传递的是ndarray对象。result_type
: {None, ‘expand’, ‘reduce’, ‘broadcast’},定义apply的输出形式。args
: 元组,是传递给函数的额外参数。
示例代码 1: 基本的 apply 使用
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
'Age': [24, 27, 22, 32, 29]}
df = pd.DataFrame(data)
# 定义一个简单的函数,将年龄增加1
def add_one(x):
return x + 1
# 使用 apply 函数增加年龄
df['Age'] = df['Age'].apply(add_one)
print(df)
Output:
示例代码 2: 使用 lambda 函数
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
'Age': [24, 27, 22, 32, 29]}
df = pd.DataFrame(data)
# 使用 lambda 函数将年龄增加1
df['Age'] = df['Age'].apply(lambda x: x + 1)
print(df)
Output:
2. 在 DataFrame 的行和列上使用 apply
apply
函数可以在 DataFrame 的行或列上使用,这通过 axis
参数控制。
示例代码 3: 对列使用 apply
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
'Age': [24, 27, 22, 32, 29]}
df = pd.DataFrame(data)
# 定义一个函数,计算年龄的平均值
def average_age(col):
return col.mean()
# 使用 apply 函数计算每列的平均年龄
average = df['Age'].apply(average_age)
print(average)
示例代码 4: 对行使用 apply
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
'Age': [24, 27, 22, 32, 29],
'Salary': [50000, 54000, 50000, 62000, 52000]}
df = pd.DataFrame(data)
# 定义一个函数,计算年龄和薪水的总和
def sum_row(row):
return row['Age'] + row['Salary']
# 使用 apply 函数计算每行的年龄和薪水总和
df['Total'] = df.apply(sum_row, axis=1)
print(df)
Output:
3. 使用 apply 处理更复杂的数据转换
apply
函数非常灵活,可以用来执行复杂的数据转换。
示例代码 5: 使用 apply 进行条件逻辑
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
'Age': [24, 27, 22, 32, 29]}
df = pd.DataFrame(data)
# 定义一个函数,根据年龄返回年龄组
def age_group(age):
if age < 25:
return 'Young'
elif age < 30:
return 'Middle'
else:
return 'Senior'
# 使用 apply 函数将年龄转换为年龄组
df['Age Group'] = df['Age'].apply(age_group)
print(df)
Output:
示例代码 6: 使用 apply 结合多个列
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
'Age': [24, 27, 22, 32, 29],
'Salary': [50000, 54000, 50000, 62000, 52000]}
df = pd.DataFrame(data)
# 定义一个函数,根据年龄和薪水判断经济状况
def economic_status(row):
if row['Age'] < 30 and row['Salary'] > 50000:
return 'Good'
else:
return 'Average'
# 使用 apply 函数判断每个人的经济状况
df['Economic Status'] = df.apply(economic_status, axis=1)
print(df)
Output:
4. 使用 apply 进行数据聚合
apply
函数也可以用来进行数据聚合,尤其是当你需要使用自定义的聚合函数时。
示例代码 7: 自定义聚合函数
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
'Age': [24, 27, 22, 32, 29],
'Salary': [50000, 54000, 50000, 62000, 52000]}
df = pd.DataFrame(data)
# 定义一个函数,计算薪水的总和
def total_salary(col):
return col.sum()
# 使用 apply 函数计算薪水总和
total = df['Salary'].apply(total_salary)
print(total)
5. 使用 apply 优化性能
虽然 apply
函数非常强大和灵活,但在处理大数据集时可能会遇到性能问题。在这种情况下,考虑使用向量化操作或其他 pandas 内置函数来优化性能。
示例代码 8: 使用向量化操作替代 apply
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
'Age': [24, 27, 22, 32, 29]}
df = pd.DataFrame(data)
# 直接使用向量化操作增加年龄
df['Age'] = df['Age'] + 1
print(df)
Output:
总结
Pandas 的 apply
函数是一个非常有用的工具,可以用于多种数据处理任务。本文通过多个示例展示了如何在不同场景下使用 apply
函数,包括基本用法、行列操作、复杂数据转换、数据聚合以及性能优化。