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

如何用Python的Pandas读取含格式异常行的CSV文件?

解决Pandas读取列数不一致CSV的分词错误问题

问题场景

你的CSV文件列数不固定:

a,b,c
a,b,c,d,e,f,g
a,b,c,d
a,b,c

使用pd.read_csv('Desktop/export.csv', delimiter=',')时,会抛出pandas.errors.ParserError: Error tokenizing data. C error: Expected 9 fields in line 3, saw 10,需求是保留所有行,生成包含所有列的DataFrame,列名用unnamed column1到对应最大列数的名称。

解决方案

方法:先获取最大列数,再指定列名读取

步骤如下:

  1. 扫描CSV文件,确定所有行中的最大列数
  2. 生成对应数量的列名
  3. 用指定列名读取文件,自动填充缺失值为NaN

代码实现:

import pandas as pd

# 1. 扫描文件获取最大列数
max_column_count = 0
with open('Desktop/export.csv', 'r', encoding='utf-8') as file:
    for line in file:
        # 按逗号分割并去除首尾空白,统计列数
        current_cols = len(line.strip().split(','))
        if current_cols > max_column_count:
            max_column_count = current_cols

# 2. 生成列名列表
column_names = [f'unnamed column{i+1}' for i in range(max_column_count)]

# 3. 读取CSV文件,指定列名,header=None表示第一行不是表头
df = pd.read_csv(
    'Desktop/export.csv',
    delimiter=',',
    names=column_names,
    header=None,
    encoding='utf-8'
)

执行后得到的DataFrame会包含所有列,列数等于文件中最大的列数,列名按要求命名,列数不足的行会用NaN填充缺失的位置。

原理说明

Pandas默认会根据第一行的列数推断整个文件的列结构,当后续行列数不一致时就会触发分词错误。通过先获取最大列数并指定列名,强制Pandas按照固定列数读取所有行,缺失的列自动填充NaN,从而避免报错并保留所有数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:55:16