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

使用pd.read_csv读取txt生成DataFrame遇字段数不匹配错误求助

解决pd.read_csv读取文件时的字段数不匹配问题

问题原因

报错Error tokenizing data. C error: Expected 5 fields in line 37, saw 6是因为第37行的字段数量和其他行不一致,大概率是行内存在不属于分隔符的逗号(比如内容里自带逗号但未正确处理)。

排查与解决步骤

1. 定位问题行内容

先打印第37行的具体内容,确认问题根源:

import csv

with open('../sort.txt', 'r', encoding='utf-8') as f:
    reader = csv.reader(f, delimiter=',', quoting=csv.QUOTE_NONE)
    for idx, row in enumerate(reader):
        if idx == 36:  # 索引从0开始,第37行对应索引36
            print(f"第37行内容: {row}")
            print(f"实际字段数: {len(row)}")

2. 快速跳过错误行(适合非关键数据)

如果不需要纠结个别错误行,直接跳过(需pandas 1.4及以上版本支持):

import pandas as pd
import csv

df = pd.read_csv('../sort.txt', delimiter=',', header=None, quoting=csv.QUOTE_NONE, encoding='utf-8', on_bad_lines='skip')

也可以用on_bad_lines='warn'只输出警告不跳过,方便统计错误行数量。

3. 处理内容中的逗号

如果是某个字段本身包含逗号(比如张三,北京这类未加引号的内容),手动分割并合并多余部分:

import pandas as pd

rows = []
with open('../sort.txt', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        parts = line.split(',')
        # 假设正常行是5个字段,超过的话把后面的合并成最后一个字段
        if len(parts) > 5:
            corrected_row = parts[:4] + [','.join(parts[4:])]
            rows.append(corrected_row)
        else:
            rows.append(parts)

df = pd.DataFrame(rows)

4. 检查分隔符是否为混合格式

如果分隔符是逗号加空格(比如, ),用正则表达式作为分隔符:

import pandas as pd
import csv

df = pd.read_csv('../sort.txt', delimiter=r',\s*', header=None, quoting=csv.QUOTE_NONE, encoding='utf-8')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:32:11