Pandas中按条件修改行值的for-loop运行正常但DataFrame未更新如何解决
问题原因
df.iterrows()迭代返回的每一行是Series类型的副本,并不是原DataFrame的视图,你对这个副本做的任何修改都不会同步到原始的DataFrame中。- 你的代码仅执行了
i[i==10].sample(2, axis=0)+100的计算操作,并没有把计算后的结果赋值回原数据的对应位置,仅打印了计算后的临时结果。
修复方案
直接通过df.loc定位到原始DataFrame的对应行、选中的列,直接赋值修改即可,参考代码如下:
for index, row in df.iterrows(): if row['F'] == 2: # 取出当前行值为10的列,随机选2个,获取对应的列名 selected_cols = row[row == 10].sample(2, axis=0).index # 对原DataFrame的指定位置赋值,加100 df.loc[index, selected_cols] += 100
运行上述代码后再打印df,就会得到你预期的修改结果。
补充说明
如果你的数据量较大,不推荐使用iterrows遍历,可以用pandas向量化操作优化性能,小数据集下上述写法可以正常使用。
内容的提问来源于stack exchange,提问作者mighty_b
相关产品推荐
相关产品推荐

