Pandas读取双引号内含逗号、撇号的CSV出现ParserError问题问询
解决Pandas读取含引号内嵌逗号的CSV报错问题
报错根源
你之前配置的quoting=csv.QUOTE_ALL参数不符合当前CSV的格式规则:该参数要求CSV所有字段都必须被双引号包裹,但你提供的CSV中只有包含逗号、空格的字段才用双引号包裹,其余字段无引号,导致解析器识别引号逻辑错乱,无法正确区分字段分隔逗号和内容逗号。
可行解决方案
方案1:调整read_csv参数(推荐,无需额外处理)
直接替换原有读取代码即可,核心是把引用规则改为匹配实际CSV格式的csv.QUOTE_MINIMAL,必要时切换解析引擎避免C引擎的边界兼容问题:
import pandas as pd import csv myfilename = 'Input.csv' myexpenses = pd.read_csv( myfilename, skipinitialspace=True, quotechar='"', quoting=csv.QUOTE_MINIMAL, # 仅带特殊字符的字段被引号包裹,匹配你当前CSV格式 engine='python' # 若C引擎仍有解析偏差,用Python引擎兼容性更强,仅大文件时速度稍慢 )
注:不需要额外处理字符串中的撇号(单引号),你指定的
quotechar='"'仅识别双引号为字段包裹符,单引号会被识别为普通内容字符。
方案2:用csv模块逐行解析兜底(极端格式问题时用)
如果CSV还有其他隐性格式问题,可以先用原生csv模块解析所有行,再转DataFrame,解析容错性更高:
import pandas as pd import csv myfilename = 'Input.csv' all_rows = [] with open(myfilename, 'r', encoding='utf-8') as f: reader = csv.reader(f, quotechar='"', quoting=csv.QUOTE_MINIMAL, skipinitialspace=True) for row in reader: all_rows.append(row) # 第一行是表头,后续是数据 myexpenses = pd.DataFrame(all_rows[1:], columns=all_rows[0])
常见问题排查
如果调整后仍有报错,可先检查文件编码:如果CSV是GBK/GB2312编码,在read_csv或open中加encoding='gbk'参数即可。
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

