pandas
的 apply
方法非常强大,可以在 DataFrame 或 Series 上应用函数。以下是一些基本的用法示例。
1. 在 DataFrame 上使用 apply
示例:对列应用函数
假设我们有一个包含学生成绩的 DataFrame,想要计算每个学生的总成绩。
import pandas as pd
# 创建示例 DataFrame
data = {
'数学': [90, 80, 85],
'英语': [95, 70, 88],
'科学': [85, 90, 80]
}
df = pd.DataFrame(data)
# 定义一个函数
def total_score(row):
return row.sum()
# 使用 apply 方法对每一行应用函数
df['总成绩'] = df.apply(total_score, axis=1)
print(df)
2. 在 Series 上使用 apply
示例:对单列应用函数
如果想要对某一列进行操作,比如将所有成绩转换为百分制:
# 定义一个转换函数
def to_percentage(score):
return score / 100
# 对 '数学' 列应用函数
df['数学百分制'] = df['数学'].apply(to_percentage)
print(df)
3. 使用 lambda 函数
你可以使用 lambda
函数来简化代码。例如,计算每个学生的平均分:
# 使用 lambda 函数计算平均分
df['平均分'] = df.apply(lambda row: row.mean(), axis=1)
print(df)
4. 处理缺失值
在处理缺失值时,apply
也很有用。例如,将缺失值替换为列的均值:
# 创建包含缺失值的 DataFrame
df_with_nan = df.copy()
df_with_nan.loc[1, '英语'] = None
# 使用 apply 填充缺失值
df_with_nan['英语'] = df_with_nan['英语'].apply(lambda x: x if pd.notnull(x) else df_with_nan['英语'].mean())
print(df_with_nan)
在 Python 中,如果你想在函数内部修改外部变量并在后续调用中使用新的值,可以通过使用可变数据类型(如列表或字典)来实现,因为这些类型的值可以被修改,而不需要重新赋值。下面是一些示例,展示如何实现这一点。
示例:使用列表作为可变数据类型
import pandas as pd
# 创建示例 DataFrame
data = {
'数学': [90, 80, 85],
'英语': [95, 70, 88]
}
df = pd.DataFrame(data)
# 使用一个列表来存储可变的外部变量
bonus = [5] # 使用列表以便可以修改
# 定义一个函数,使用外部变量并修改它
def add_bonus(score):
score_with_bonus = score + bonus[0] # 使用当前的 bonus 值
bonus[0] += 2 # 修改外部变量,以便下次调用时使用新的值
return score_with_bonus
# 应用函数
df['数学加分'] = df['数学'].apply(add_bonus)
print(df)
# 再次应用以查看 bonus 的变化
df['英语加分'] = df['英语'].apply(add_bonus)
print(df)
输出结果
第一次调用 add_bonus
时,bonus 为 5;第二次调用时,bonus 增加到 7。
示例:使用字典作为可变数据类型
你还可以使用字典来存储多个外部变量。
# 使用字典来存储可变的外部变量
variables = {'bonus': 5}
# 定义一个函数,使用外部变量并修改它
def add_custom_bonus(score):
score_with_bonus = score + variables['bonus']
variables['bonus'] += 1 # 修改外部变量
return score_with_bonus
# 应用函数
df['科学加分'] = df['数学'].apply(add_custom_bonus)
print(df)
# 再次应用以查看 bonus 的变化
df['数学再加分'] = df['数学'].apply(add_custom_bonus)
print(df)
实例:
import pandas as pd
# 创建示例 DataFrame
data = {
'收入': [30000, 45000, 50000],
}
df = pd.DataFrame(data)
# 使用字典作为外部变量
外部变量 = {'奖金': 5000}
# 定义一个函数,修改外部变量
def calculate_final_income(row):
外部变量['奖金'] += 1000 # 修改外部变量
return row['收入'] + 外部变量['奖金']
# 对每一行应用函数
df['最终收入'] = df.apply(calculate_final_income, axis=1)
# 输出结果和外部变量
print(df)
print("当前奖金:", 外部变量['奖金'])
执行上述代码后,你会得到类似以下的输出结果:
收入 最终收入
0 30000 36000
1 45000 47000
2 50000 51000
当前奖金: 7000
解释
外部变量:字典 外部变量 用于存储奖金信息。
函数:calculate_final_income 函数在计算每行的最终收入时会增加奖金,并更新外部变量的值。
应用函数:使用 apply 方法对 DataFrame 的每一行调用该函数,计算最终收入。
奖金变化:每次调用函数时,奖金增加 1000,最后输出的奖金为 7000。
小结
- 使用可变类型:通过使用列表或字典,你可以存储和修改外部变量,而不需要创建新的变量。
- 修改外部变量:在函数内部对列表或字典进行修改,可以影响后续的函数调用。