pandas使用iterrows修改VALOR_ID列报TypeError错误问题问询
报错根因
pd.DataFrame.iterrows()遍历返回的是(行索引, 行数据Series)的二元组,你直接把返回的元组当作行对象用字符串键取值,自然会触发类型错误。另外你原代码中读取文件存入的是patients变量,最后写文件调用的df未定义,也会触发后续报错。
修复代码
方案1:修正iterrows循环逻辑
注意:iterrows返回的行对象是副本,直接修改不会生效到原DataFrame,需要通过索引定位原表赋值:
import pandas as pd # 你的随机字符串生成函数 def generate_cip(): # 示例生成10位随机字母数字串,可替换为你自己的实现逻辑 import random import string return ''.join(random.choices(string.ascii_letters + string.digits, k=10)) patients = pd.read_csv("partial.csv") # 拆解iterrows返回的索引和行对象 for idx, _ in patients.iterrows(): new_cip = generate_cip() # 按索引给原表对应行的VALOR_ID字段赋值 patients.loc[idx, 'VALOR_ID'] = new_cip patients.to_csv("partial-writer.csv", index=False) print(patients)
方案2:更简洁的向量化写法(无需显式循环)
如果不需要用到行内其他字段的值生成随机串,直接用列表推导式赋值即可,性能比iterrows高很多:
import pandas as pd def generate_cip(): # 同上你的生成逻辑 import random import string return ''.join(random.choices(string.ascii_letters + string.digits, k=10)) patients = pd.read_csv("partial.csv") # 直接生成和行数一致的随机串列表赋值给目标列 patients['VALOR_ID'] = [generate_cip() for _ in range(len(patients))] patients.to_csv("partial-writer.csv", index=False) print(patients)
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

