如何在DataFrame迭代中修改行值并持久化更改结果
解决DataFrame迭代修改无法持久化的问题
问题原因
使用iterrows()迭代DataFrame时,每次循环拿到的r是原数据行的副本,而非对原DataFrame的引用,所以修改r的内容不会同步到原数据中。
可行解决方案
通过
loc直接修改原DataFrame
在迭代时,利用行索引i,通过df.loc定位到原数据的对应位置赋值:for i, r in df.iterrows(): df.loc[i, 'population'] = r['population'] * 2使用
apply方法批量处理
用apply按行执行逻辑,直接生成新列值覆盖原列:df['population'] = df.apply(lambda row: row['population'] * 2, axis=1)用
itertuples替代iterrows(更高效)itertuples返回命名元组,通过元组的Index属性获取行索引,再修改原数据:for row in df.itertuples(): df.loc[row.Index, 'population'] = row.population * 2优先使用向量化操作(pandas推荐)
迭代行在数据量大时效率极低,pandas原生支持整列的向量化运算,这是最优方案:# 两种写法效果一致 df['population'] *= 2 # 或者 df['population'] = df['population'] * 2
内容的提问来源于stack exchange,提问作者techie11
相关产品推荐
相关产品推荐

