使用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
相关产品推荐
相关产品推荐

