这是我的第389篇原创文章。
一、引言
在Python中,使用 pandas
库处理 DataFrame
是非常常见的操作。如果你需要循环遍历每一行,并根据处理结果在该行新增几列,假设我们有一个 DataFrame
,包含两列 A
和 B
,我们希望对每一行进行处理,并新增两列 C
和 D
,其中 C = A + B
,D = A * B
。可以通过以下几种方式实现。
二、实现过程
2.1 使用apply
方法
apply 方法是处理 DataFrame
的高效方式,适用于对每一行或每一列进行操作。如果你需要对每一行进行处理,并在该行新增几列,可以定义一个函数,然后将其应用到每一行。
import pandas as pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
# 定义一个函数,用于处理每一行
def process_row(row):
row['C'] = row['A'] + row['B']
row['D'] = row['A'] * row['B']
return row
# 使用 apply 方法对每一行应用处理函数
df = df.apply(process_row, axis=1)
print(df)
2.2 使用iterrows
或itertuples
如果你需要更细致地控制每一行的处理过程,可以使用 iterrows
或 itertuples
遍历每一行,然后手动更新 DataFrame
。
import pandas as pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
# 遍历每一行,处理并新增列
for index, row in df.iterrows():
df.loc[index, 'C'] = row['A'] + row['B']
df.loc[index, 'D'] = row['A'] * row['B']
print(df)
2.3 使用 assign
方法
assign
方法可以用于在 DataFrame
中新增列,它返回一个新的 DataFrame
,不会修改原始数据。
import pandas as pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
# 使用 assign 方法新增列
df = df.assign(
C=lambda x: x['A'] + x['B'],
D=lambda x: x['A'] * x['B']
)
print(df)
2.4 直接使用向量化操作
如果处理逻辑比较简单,可以直接使用向量化操作,这种方式通常比循环更高效。
import pandas as pd
# 创建一个示例 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data)
# 直接计算并新增列
df['C'] = df['A'] + df['B']
df['D'] = df['A'] * df['B']
print(df)
三、小结
总结
-
apply
方法:适用于复杂的行处理逻辑。 -
iterrows
或itertuples
:适用于需要逐行处理的情况,但性能较低。 -
assign
方法:适用于需要新增多列的情况,且不会修改原始数据。 -
向量化操作:适用于简单的计算逻辑,性能最高。
根据你的具体需求选择合适的方法。
作者简介:
读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。