如何修正pandas编辑CSV脚本 解决引号处理与列操作报错问题
问题根因
你遇到的KeyError是因为重命名列后,第一列的列名已经变为title,但代码仍在用位置值0作为列名取数,pandas按列名匹配自然找不到对应列。除此之外你的代码还有几处逻辑错误:
- 调用
df.drop时设置了inplace=True,方法会直接修改原DataFrame、返回None,将返回值赋值给变量无法拿到有效数据 - 使用双方括号
renamed[[0]]取数得到的是DataFrame对象,不支持.str字符串访问器,只有取单列得到的Series对象才能用.str做批量字符串处理 df.update()的作用是按索引对齐传入的另一个DataFrame来更新当前数据,不能直接传入字符串拼接表达式做值替换
关于删列方法选择:del是Python原生语法,一次仅支持删除一列,批量删列需要写循环,可读性和效率都差;df.drop支持批量指定列删除,是更推荐的写法。如果后续原始CSV可能新增无关列,更建议直接筛选需要保留的列,不用逐列删除,鲁棒性更强。
修正后完整代码
import pandas as pd # 读入CSV,统一按字符串类型解析,避免商品ID等字段丢前置0、被转成数值格式 df = pd.read_csv('Sheet1.csv', dtype=str) # 方案1:直接筛选需要保留的列,不受原始CSV新增无关列的影响,推荐使用 # df = df.iloc[:, [0, 1]] # 方案2:按你原本的逻辑删除指定位置的列,inplace修改无需接收返回值 df.drop(df.columns[[2,3,4,5,6,7,8,9,10]], axis=1, inplace=True) # 重命名保留的列 df.rename(columns={df.columns[0]: 'title', df.columns[1]: 'product_id'}, inplace=True) # 第一步:将title内部的双引号替换为两个单引号,regex=False按普通字符串匹配,无需转义 df['title'] = df['title'].str.replace('"', "''", regex=False) # 第二步:给所有title内容外层包裹双引号 df['title'] = '"' + df['title'] + '"' # 预览处理结果 print(df.head()) # 保存到指定路径,index=False不导出行号,utf-8-sig编码保证Excel打开中文不乱码 df.to_csv('处理后_批量更新用.csv', index=False, encoding='utf-8-sig')
效果验证
以你给出的样例做测试:
原始内容:Banini Movie" Teather
处理后结果:"Banini Movie'' Teather"
完全符合预期要求。
内容的提问来源于stack exchange,提问作者Vlajko
相关产品推荐
相关产品推荐

