You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用iterrows()填充DataFrame的Unique Code列数据不更新该如何解决

问题原因

iterrows() 遍历过程中返回的 row 是当前行数据的副本,而非原始DataFrame的视图引用,你对row的所有修改都只会作用在这个临时副本上,不会回写到原始的DataFrame里,所以才会出现打印结果正确、但df本身没有更新的情况。

解决方法

方案1:基于iterrows的修改(保留原循环写法)

不需要改动替换逻辑,只要把最终修改后的值直接赋值给原始DataFrame对应索引的位置即可,修改后代码如下:

import pandas as pd
lst = [['tom', 25, 'EVT-PS-Name-Age' ], ['krish', 30, 'EVT-PS-Name-Age'],
       ['nick', 26, 'EVT-PS-Name-Age'], ['juli', 22, 'EVT-PS-Name-Age']]
    
df = pd.DataFrame(lst, columns =['Name', 'Age', 'Unique Code'])

for index, row in df.iterrows():
    new_code = str(row['Unique Code'])
    new_code = new_code.replace('Name', row['Name'])
    new_code = new_code.replace('Age', str(row['Age']))
    # 直接赋值给原始df的对应位置
    df.loc[index, 'Unique Code'] = new_code
    print(new_code)
    
df.head()

方案2:向量化替换(更推荐,性能远高于循环)

针对这种整列替换的场景,直接用pandas的字符串操作即可,不需要遍历行:

df['Unique Code'] = df['Unique Code'].str.replace('Name', df['Name']).str.replace('Age', df['Age'].astype(str))

一行代码就能实现同样效果,数据量越大性能优势越明显。

内容的提问来源于stack exchange,提问作者Filippo Sebastio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 00:36:13