apply()
基本用法
- 对列应用函数:默认情况下,
apply()
方法会对DataFrame的每一列应用函数。如果你想对行应用函数,需要设置axis=1
。 - 返回值:
apply()
方法返回一个新的Series(如果沿着列应用)或DataFrame(如果沿着行应用,且函数返回多个值)。 - 函数:你可以传递任何可调用对象(如函数、lambda表达式或方法)给
apply()
。
示例
对列应用函数
import pandas as pd
# 创建一个简单的DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
})
# 定义一个简单的函数,对每个元素加1
def add_one(x):
return x + 1
# 对每一列应用add_one函数
df_plus_one = df.apply(add_one)
print(df_plus_one)
在这个例子中,add_one
函数被应用于DataFrame的每一列,每个元素都增加了1。
对行应用函数
# 定义一个函数,计算每行的和
def row_sum(row):
return row.sum()
# 对每一行应用row_sum函数
row_sums = df.apply(row_sum, axis=1)
print(row_sums)
在这个例子中,row_sum
函数被应用于DataFrame的每一行,计算每行的和,并返回一个Series。
使用lambda函数
# 使用lambda函数对每一列的元素乘以2
df_multiplied = df.apply(lambda x: x * 2)
print(df_multiplied)
在这个例子中,一个lambda函数被用于将DataFrame中每个元素乘以2。
处理复杂的数据结构
如果你的DataFrame包含复杂的数据结构(如列表或字典),你可以编写更复杂的函数来处理这些数据。
# 创建一个包含列表的DataFrame
df_complex = pd.DataFrame({
'data': [[1, 2], [3, 4], [5, 6]]
})
# 定义一个函数,计算列表中元素的和
def sum_list(lst):
return sum(lst)
# 对'data'列应用sum_list函数
sums = df_complex['data'].apply(sum_list)
print(sums)
在这个例子中,sum_list
函数被用于计算DataFrame中’data’列每个列表元素的和。
注意事项
- 当对大型DataFrame使用
apply()
时,性能可能会受到影响,因为Pandas需要将数据逐行或逐列传递给Python函数。在可能的情况下,优先考虑使用Pandas的内置向量化操作来提高性能。 - 如果你的函数返回多个值,并且你希望对行应用该函数,确保你的函数返回一个Series或类似的结构,这样Pandas才能正确地将其组装成一个新的DataFrame。