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

Python优雅消除CSV特定字段多余逗号,解决pandas分词报错

解决CSV中特定字段多余逗号导致Pandas解析错误的问题

我明白你遇到的麻烦了——CSV里的GICS industry group字段出现Food, Beverage & Tobacco时,里面的逗号没被引号包裹,导致Pandas解析时误以为这是额外字段,抛出了"Error tokenizing data"的错误。下面我来帮你优化代码,优雅搞定这个问题:

问题根源分析

你原代码里的line[2] = 'Food Beverage & Tobacco'是行不通的,因为Python里字符串是不可变类型,不能通过索引直接修改;而且这种定位方式也不够精准,我们需要更稳妥地处理那个多余的逗号。

优雅解决方案:精准替换目标字段的逗号

既然我们明确知道只有Food, Beverage & Tobacco这个值里有多余逗号,最直接高效的方式就是在写入文件前,全局替换掉这个特定字符串里的逗号:

#!/usr/bin/env python2.7
print "hello from python 2"
import pandas as pd
import urllib2
import os

url = 'http://www.asx.com.au/asx/research/ASXListedCompanies.csv'
response = urllib2.urlopen(url)
csv_content = response.read()

# 精准替换目标字段中的多余逗号
csv_content = csv_content.replace('Food, Beverage & Tobacco', 'Food Beverage & Tobacco')

# 处理并写入文件:保留原逻辑跳过前两行
with open('asx.csv', 'wb') as f:
    # 将内容按行分割,跳过前两行后重新拼接
    lines = csv_content.splitlines()
    processed_content = '\n'.join(lines[2:])
    f.write(processed_content)

# 现在可以正常读取CSV了
df_api = pd.read_csv('asx.csv')
df_api.rename(columns={
    'Company name': 'Company',
    'ASX code': 'Stock',
    'GICS industry group': 'Industry'
}, inplace=True)

为什么这个方法更优?

  1. 精准高效:只针对已知的问题字段做替换,不会干扰其他正常的逗号分隔符
  2. 代码简洁:不需要逐行判断逗号数量,全局替换就能完成处理
  3. 逻辑严谨:解决了原代码中字符串不可修改的错误,同时保留了你原本跳过前两行的需求

如果未来还有类似的字段出现多余逗号,你只需要在replace方法里添加对应的替换规则即可,扩展性也很好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:56:15