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)
为什么这个方法更优?
- 精准高效:只针对已知的问题字段做替换,不会干扰其他正常的逗号分隔符
- 代码简洁:不需要逐行判断逗号数量,全局替换就能完成处理
- 逻辑严谨:解决了原代码中字符串不可修改的错误,同时保留了你原本跳过前两行的需求
如果未来还有类似的字段出现多余逗号,你只需要在replace方法里添加对应的替换规则即可,扩展性也很好。
内容的提问来源于stack exchange,提问作者lotteryman
相关产品推荐
相关产品推荐

