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

如何修正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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:18:20