使用pandas.apply()
方法可以将一个自定义函数应用到DataFrame的每一行或每一列。接下来我将为您详细解释如何使用该方法,并给出一个实例说明。
函数定义
首先,我们需要定义一个自定义函数,该函数将被应用于DataFrame中的每一个元素。例如,我们定义如下函数:
def square(x):
return x**2
该函数将返回输入参数的平方。
应用于每一行或每一列
接下来,我们需要明确我们希望将该函数应用于DataFrame的每一行还是每一列。为此,我们可以使用apply()
方法的axis
参数,其默认值为0
,表示应用于每一列;1
表示应用于每一行。例如,下面代码演示了如何将square()
函数应用于DataFrame的每一列:
import pandas as pd
# 创建一个DataFrame对象
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
})
# 对每一列应用square()函数
df.apply(square)
输出结果如下:
A B C
0 1 16 49
1 4 25 64
2 9 36 81
注意,上述代码返回的是一个新的DataFrame对象,并不会修改原始数据。
如果我们希望将square()
函数应用于每一行,则可以将axis
参数设置为1
:
# 对每一行应用square()函数
df.apply(square, axis=1)
输出结果如下:
0 1 2
0 1 16 49
1 4 25 36
2 9 36 81
同样,上述代码返回的也是一个新的DataFrame对象。
实例说明
假设我们有一个简单的数据集,记录了一组人的身高和体重:
名字 | 身高(cm) | 体重(kg) |
---|---|---|
Tom | 170 | 65 |
Jack | 175 | 68 |
Mary | 162 | 52 |
我们现在希望计算每个人的BMI值(Body Mass Index)。BMI计算公式为:
$$BMI = \frac{体重}{身高^2}$$
我们可以定义以下函数来计算BMI值:
def calculate_bmi(height, weight):
return weight / (height / 100) ** 2
接下来,我们将该函数应用于DataFrame中的每一行:
import pandas as pd
# 创建一个DataFrame对象
df = pd.DataFrame({
'姓名': ['Tom', 'Jack', 'Mary'],
'身高(cm)': [170, 175, 162],
'体重(kg)': [65, 68, 52]
})
# 计算每个人的BMI值
df['BMI'] = df.apply(lambda row: calculate_bmi(row['身高(cm)'], row['体重(kg)']), axis=1)
# 输出结果
print(df)
最终输出结果为:
姓名 身高(cm) 体重(kg) BMI
0 Tom 170 65 22.491349
1 Jack 175 68 22.204082
2 Mary 162 52 19.810057
可以看到,我们成功地为每个人计算了BMI值,并将其添加到了DataFrame中。通过apply()
方法,我们可以轻松地将自定义函数应用到DataFrame的每一行或每一列,从而实现数据的批量处理。