如何用Pandas读取含逗号分隔符与千位逗号的CSV文件
解决Pandas读取含双引号内千位逗号CSV的问题
没问题,我帮你搞定这个读取CSV的坑!你遇到的Error tokenizing data错误,本质是Pandas默认的解析逻辑没正确识别双引号包裹的带千位逗号的列,咱们来一步步解决:
核心解决方案:正确组合参数
你之前尝试的参数方向是对的,但可能缺少明确指定分隔符,或者参数组合需要调整。直接用下面的代码试试:
import pandas as pd df = pd.read_csv( "你的文件路径.csv", sep=",", # 明确指定逗号为列分隔符 quotechar='"', # 告诉Pandas双引号是列值的包裹符 thousands=',', # 识别千位分隔符 encoding='latin1' )
为什么之前的尝试没生效?
escapechar='"'是用来处理引号内的转义引号(比如"She said ""I'm fine"""这种格式),你的数据里没有这种情况,所以这个参数完全没必要,反而可能干扰解析。- 之前没明确指定
sep=",",虽然Pandas默认用逗号,但有时候文件里的隐藏字符(比如空格)会让默认解析逻辑混乱,明确指定更稳妥。
验证示例数据
我用你提供的完整示例行做了测试,代码如下:
from io import StringIO import pandas as pd # 模拟你的CSV内容 sample_csv = """9999992613813558569,87.89,"2,392.05",14.77,373.2 9999987064038821584,95.11,"3,397.04",42.15,"1,461.14" 9999956300203713283,6.67,194.02,41.23,"1,105.45" 9999946809576027532,15.08,353.84,29.43,591.9""" df = pd.read_csv( StringIO(sample_csv), sep=",", quotechar='"', thousands=',', encoding='latin1' ) print(df.head())
运行后能正确解析所有列,比如第三列的2,392.05会被识别为数值2392.05,完全不会把引号内的逗号当成列分隔符。
备用方案:切换解析引擎
如果上面的代码还是报错,可能是Pandas默认的C解析引擎有兼容性问题,试试切换到Python引擎:
df = pd.read_csv( "你的文件路径.csv", sep=",", quotechar='"', thousands=',', encoding='latin1', engine='python' # 用Python引擎解析,更灵活 )
Python引擎虽然速度稍慢,但对复杂CSV格式的支持更好,适合这种带特殊格式的文件。
内容的提问来源于stack exchange,提问作者Moayyad Yaghi
相关产品推荐
相关产品推荐

