Pandas read_csv 处理字段数不匹配与 KeyError 报错详解

陈默
陈默
发布时间:2026-10-13| 7人浏览过
原创

本文详解Pandas中read_csv读取CSV文件时常见的两类错误:因字段数不匹配导致的ParserError及KeyError。通过设置error_bad_lines=False跳过异常行,并区分Series与DataFrame赋值差异,提供针对EOF字符串错误及类型比较错误的实用解决方案。

处理字段数不匹配的ParserError

在使用Pandas读取CSV文件时,若某行数据的列数与表头定义的列数不一致,程序通常会抛出异常。如果确认这些报错行可以安全忽略,可以通过添加特定参数来跳过它们。

具体配置方式如下:

pandas.read_csv(***,error_bad_lines=False)

调用 pandas.read_csv(filePath) 读取CSV文件时,常会遭遇如下报错信息:

ParserError:Error tokenizing data.C error:Expected 2 fields in line 407,saw 3.

该错误提示表明,在CSV文件的第407行,程序预期读取2个字段,但实际解析到了3个字段。

造成此问题的原因通常是:CSV文件的表头(header)仅定义了两个字段名,而第407行数据中包含了额外的逗号分隔符,或者该行确实包含三个数据部分,导致Pandas无法正确对齐字段。

解决思路有两种:一是手动修正CSV文件,删除第407行多余的字段;二是在调用read_csv时通过设置参数 error_bad_lines=False 来忽略此类解析错误。

修改后的代码示例如下:

pandas.read_csv(filePath,error_bad_lines=False)

通过上述设置,程序将自动跳过那些因格式错乱(如多余逗号导致列数增加)而报错的行,继续读取其余有效数据。

排查与解决KeyError错误

另一种常见错误是 KeyError,具体表现如下:

出现此类错误通常是因为代码中引用了DataFrame中不存在的列名(例如 'id' 字段)。可能的原因包括:

CSV文件的表头部分未正确识别逗号分隔符,导致所有列被合并为一列。此时,可通过 df.columns.values 查看当前DataFrame实际包含的列名:

print(df.columns.values)

或者在操作DataFrame的过程中,意外丢失了 'id' 字段的表头信息且未察觉。

一个典型的错误操作示例如下:

df=df[df['id']!='null']#取得id字段不为null的行 df=df['id']#赋值后df为Series,表示df在id列的值,而不再是一个DataFrame,于是丢掉了id的头,此时若再使用df['id']将报错。

需要明确区分“获取列的值”与“保留列结构”的区别:

df=df['id']#取id列的值,赋值后df为Series类型,可用print(type(df))来查看其类型 df=df[['id']]#只取df的id列作为一个新的DataFrame,赋值后df仍然是一个DataFrame df=df[['id','age']]#取df的id和age列作为一个新的DataFrame,赋值后df仍然是一个DataFrame

关于行过滤操作的注意事项:

df=df[df['id']!='null']#过滤掉id字段取值为'null'的行

需注意,此处比较的 'null' 是字符串类型。如果df中某行 'id' 字段的实际值不是字符串类型,或者为None/空值,直接比较会引发 TypeError:invalid type comparison 错误,因为Python要求比较操作数类型一致。

解决方法:如果无法保证 'id' 列所有数据均为字符串类型,应移除该过滤条件,或先进行类型转换后再进行比较。

解决EOF inside string错误

补充知识:使用Pandas的read_csv读取文件时,有时会遇到如下错误:EOF inside string starting at line

解决方法:通过调整 quoting 参数来处理包含引号的字符串数据。

df = pd.read_csv(csvfile, header = None, delimiter="\t", quoting=csv.QUOTE_NONE, encoding='utf-8')

以上关于Pandas read_csv处理跳过报错行及常见错误的解决方案供参考,希望能帮助读者解决数据读取中的实际问题。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。