Pandas循环处理数据时如何去除Amount列单元格引号并解决数值解析报错
问题原因
- 你写的for循环不会实际修改DataFrame中的值:循环中拿到的
cell是原始值的副本,修改后没有回写到DataFrame对应位置 - 金额列包含
$符号,即便去掉双引号,带$的字符串也无法直接转为float类型,这是报错的核心原因
最优解决方案
优先推荐读取CSV时直接完成清洗,减少后续处理步骤:
方案1:读取CSV时直接处理(性能最优)
通过pd.read_csv的converters参数定义清洗规则,一步完成清洗+类型转换:
# 定义通用金额清洗函数 def clean_amount(amt_str): # 先后去除双引号、$符号后转浮点型 return float(amt_str.strip('"').lstrip('$')) for f in files: print(f) df = pd.read_csv(f, header = None, nrows=1) print(df) je = df.iloc[0,1] # 传入converters参数自动处理Amount列 df2 = pd.read_csv(f, header = 6, converters={'Amount': clean_amount}) df2.to_excel(w, sheet_name = je, index = False)
方案2:已读入DataFrame后的批量处理
如果数据已经读入内存,用pandas向量化str方法处理,完全避免低效的for循环:
# 链式操作批量去除双引号、$符号后转数值类型 df2['Amount'] = pd.to_numeric(df2['Amount'].str.strip('"').str.lstrip('$'))
内容的提问来源于stack exchange,提问作者pilotmike327
相关产品推荐
相关产品推荐

