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

使用iterrows循环修改Pandas DataFrame时数据未同步问题求助

问题解析:为什么循环内修改了行值,但原DataFrame没变化?

嗨,我来帮你弄明白这个问题~ 你遇到的情况其实是Pandas里iterrows()的一个常见小坑:

核心原因

iterrows()返回的每一行row是原DataFrame的副本,而不是对原数据的直接引用。也就是说,你在循环里修改row['Serial Number'],只是改了这个临时生成的副本对象,完全没触碰到原DataFrame里的真实数据,所以循环结束后原DataFrame的值自然没变化。

解决方案1:用.loc直接修改原DataFrame

如果你坚持要用循环的方式实现,得通过索引直接定位到原DataFrame的对应位置修改,而不是修改副本:

import pandas as pd

a = pd.read_excel('C:/Users/HP/Desktop/WFH/PowerBI/CMM data.xlsx', 'CMM_unclean')
a['Serial Number'] = a['Serial Number'].apply(str)
print(a.iloc[72,1])

for index, row in a.iterrows():
    if len(row['Serial Number']) == 6:
        # 用.loc直接定位原DataFrame的行和列进行修改
        a.loc[index, 'Serial Number'] = 'SR0' + row['Serial Number']
        print(a.loc[index, 'Serial Number'])

print(a.iloc[72,1])

解决方案2:更高效的矢量化操作(推荐)

Pandas的设计核心就是尽量避免循环,用矢量化操作不仅代码更简洁,处理大数据的效率也会高很多。你可以用字符串方法结合条件赋值来批量处理:

import pandas as pd

a = pd.read_excel('C:/Users/HP/Desktop/WFH/PowerBI/CMM data.xlsx', 'CMM_unclean')
a['Serial Number'] = a['Serial Number'].astype(str)

# 生成条件掩码,筛选出长度为6的Serial Number
mask = a['Serial Number'].str.len() == 6
# 对符合条件的行批量添加前缀
a.loc[mask, 'Serial Number'] = 'SR0' + a.loc[mask, 'Serial Number']

print(a.iloc[72,1])

这样修改后,原DataFrame的值会直接更新,而且代码更符合Pandas的使用习惯哦。

内容的提问来源于stack exchange,提问作者Saurabh Arya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:52:38