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

使用Pandas读取CSV文件时遭遇Tokenizing错误,该修改代码还是文件?

Pandas读取CSV解析错误的解决办法

问题场景

使用Pandas读取CSV文件时反复出现解析错误,错误提示如下:

pandas.parser.CParserError: Error tokenizing data. C error: Expected 2 fields in line 3, saw 12

用到的代码:

df = pd.read_csv('ZCS006A_16_23AUG_ALL_20220804020843.csv', delimiter = ',')
df.head(10)

提供的CSV文件异常内容片段:

AIRLINE_CODE,FLIGHT_NO,AIRCRAFT_TYPE_CODE,DEP_PORT_CODE,ARR_PORT_CODE,DEP_DATE,ARR_DATE,STD,STA,BLOCK_TIME,LEG,PART_NO,PART_NAME,PART_DESC,PART_SECTOR_USAGE_CODE,PART_SECTOR_USAGE_NAME,PART_CATEGORY_CODE,PAX_CLASS,EXCHANGE_TYPE_CODE,PART_QTY,PART_WEIGHT,IS_DEADHEAD LA,0800,789,AKL,SCL,16-AUG-22,16-AUG-22,1840,1340,660,2,10002993,MANTEQUILLA YC,10002993: MANTEQUILLA YC,D,Disposable,,Y,CY,143,35.75,0 LA,0800,789,AKL,SCL,16-AUG-22,16-AUG-22,1840,1340,660,2,10003049,BEBIDA BLANCA 1500CC YC,10003049: BEBIDA BLANCA 1500CC YC,D,Disposable,,Y,BX,4,6.5332,0 LA,0800,789,AKL,SCL,16-AUG-22,16-AUG-22,1840,1340,660,2,10003049,BEBIDA BLANCA 1500CC YC,10003049: BEBIDA BLANCA 1500CC YC,D,Disposable,,Y,EX,6,9.7998,0 LA,0800,789,AKL,SCL,16-AUG-22,16-AUG-22,1840,1340,660,2,10003153,COCA COLA 1500CC YC,10003153: COCA COLA 1500CC YC,D,Disposable,,Y,BX,4,6.4,0 LA,0800,789,AKL,SCL,16-AUG-22,16-AUG-22,1840,1340,660,2,10003153,COCA COLA 1500CC YC,10003153: COCA COLA 1500CC YC,D,Disposable,,Y,EX,8,12.8,0

问题根源

从提供的CSV内容能明显看出,所有数据行都没有换行,全部拼接在表头行末尾。表头最后一个字段IS_DEADHEAD后面直接跟了第一行数据的LA,没有换行符分隔,导致Pandas解析时无法识别每行的字段边界,把表头+多行数据当成一行处理,最终引发字段数量不匹配的错误。

解决方案

方案1:修复CSV文件(推荐)

直接修改CSV文件,在每条数据行的起始位置添加换行符,让每行对应一条完整数据。修复后的正确格式如下:

AIRLINE_CODE,FLIGHT_NO,AIRCRAFT_TYPE_CODE,DEP_PORT_CODE,ARR_PORT_CODE,DEP_DATE,ARR_DATE,STD,STA,BLOCK_TIME,LEG,PART_NO,PART_NAME,PART_DESC,PART_SECTOR_USAGE_CODE,PART_SECTOR_USAGE_NAME,PART_CATEGORY_CODE,PAX_CLASS,EXCHANGE_TYPE_CODE,PART_QTY,PART_WEIGHT,IS_DEADHEAD
LA,0800,789,AKL,SCL,16-AUG-22,16-AUG-22,1840,1340,660,2,10002993,MANTEQUILLA YC,10002993: MANTEQUILLA YC,D,Disposable,,Y,CY,143,35.75,0
LA,0800,789,AKL,SCL,16-AUG-22,16-AUG-22,1840,1340,660,2,10003049,BEBIDA BLANCA 1500CC YC,10003049: BEBIDA BLANCA 1500CC YC,D,Disposable,,Y,BX,4,6.5332,0
LA,0800,789,AKL,SCL,16-AUG-22,16-AUG-22,1840,1340,660,2,10003049,BEBIDA BLANCA 1500CC YC,10003049: BEBIDA BLANCA 1500CC YC,D,Disposable,,Y,EX,6,9.7998,0
LA,0800,789,AKL,SCL,16-AUG-22,16-AUG-22,1840,1340,660,2,10003153,COCA COLA 1500CC YC,10003153: COCA COLA 1500CC YC,D,Disposable,,Y,BX,4,6.4,0
LA,0800,789,AKL,SCL,16-AUG-22,16-AUG-22,1840,1340,660,2,10003153,COCA COLA 1500CC YC,10003153: COCA COLA 1500CC YC,D,Disposable,,Y,EX,8,12.8,0

修复完成后,原代码即可正常运行。

方案2:修改代码处理格式异常

如果暂时无法修改CSV文件,可以通过代码先读取文件内容,手动插入换行符后再解析:

import pandas as pd
from io import StringIO

# 读取原始文件内容
with open('ZCS006A_16_23AUG_ALL_20220804020843.csv', 'r') as f:
    raw_content = f.read()

# 在每条数据行的起始标识(LA,)前添加换行符(需根据实际数据起始调整规则)
fixed_content = raw_content.replace(' LA,', '\nLA,')

# 用StringIO模拟文件对象读取修复后的内容
df = pd.read_csv(StringIO(fixed_content), delimiter=',')
df.head(10)

注意:这种方法依赖数据行的固定起始特征,若数据行起始不统一,需要调整匹配规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:48:45