在使用 Pandas 处理数据时,有时需要迭代数据帧并更新每一行。虽然 Pandas 提供了多种方法来迭代数据帧,但直接迭代行并更新数据通常不是最优的方式,因为这可能会导致性能问题。尽量使用矢量化操作来提高效率。
然而,如果确实需要逐行迭代并更新数据,可以使用以下几种方法:
iterrows()
iterrows()
方法返回一个迭代器,生成 (index, Series) 对。你可以使用它来逐行更新数据。
import pandas as pd
# 创建示例数据帧
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 迭代数据帧并更新每一行
for index, row in df.iterrows():
df.at[index, 'A'] = row['A'] * 2
df.at[index, 'B'] = row['B'] + 1
print(df)
apply()
apply()
方法可以应用一个函数到数据帧的每一行或每一列。这个方法通常比 iterrows()
更高效。
import pandas as pd
# 创建示例数据帧
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 定义一个函数来更新行
def update_row(row):
row['A'] = row['A'] * 2
row['B'] = row['B'] + 1
return row
# 使用 apply() 方法更新每一行
df = df.apply(update_row, axis=1)
print(df)
矢量化操作通常是处理数据帧的最优方法,因为它们利用了底层的 C 或 Fortran 代码,速度更快。
import pandas as pd
# 创建示例数据帧
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 使用矢量化操作更新数据帧
df['A'] = df['A'] * 2
df['B'] = df['B'] + 1
print(df)
itertuples()
itertuples()
方法返回一个迭代器,生成命名元组。它比 iterrows()
更高效,因为它避免了生成 Pandas Series 对象的开销。
import pandas as pd
# 创建示例数据帧
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
# 迭代数据帧并更新每一行
for row in df.itertuples(index=True, name='Pandas'):
df.at[row.Index, 'A'] = row.A * 2
df.at[row.Index, 'B'] = row.B + 1
print(df)
领取专属 10元无门槛券
手把手带您无忧上云