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

pandas读取空格分隔txt文件报ParserError及空值问题求解

问题根因
  • pandas读取抛出列数过多报错,核心原因是目标文件不同行的数值个数不统一。pandas默认基于C引擎解析时,会先扫描文件推断总列数,后续行的字段数和推断值偏差过大时就会直接触发解析错误,和分隔符参数的写法无关。
  • 原生Python拆分出现空字符串,是因为你手动指定split(" ")按单个空格做分隔符,一旦文件里存在连续多空格、行尾残留空格的情况,分隔位置就会被识别为空值。另外你之前用append存储拆分结果,最终得到的是按行分组的二维列表,不符合「所有数值拆为独立元素逐行存储」的需求。
正确实现方案

方案1:原生Python实现(无第三方依赖,最稳定)

直接用无参数的str.split()方法,它默认会将任意长度的连续空白(多个空格、制表符、换行符等)识别为分隔符,自动忽略行首行尾的空白字符,从根源上避免空字符串产生,同时用extend把所有值打平为一维列表:

data = []
# 用with上下文管理器自动处理文件关闭,避免资源泄漏
with open("train.txt", "r", encoding="utf-8") as f:
    for line in f:
        # 无参数split自动处理多空格、首尾空白,不会产生空串
        line_nums = line.split()
        # 打平存储为独立元素,如果需要整数类型可以转成int
        data.extend([int(num) for num in line_nums])

# 逐行输出验证
for num in data:
    print(num)

方案2:pandas实现

如果需要用pandas处理,先按整行读入规避列数校验问题,再拆分打平即可,不会丢失数据:

import pandas as pd
# 先按整行读取为单列,跳过列数校验逻辑
df = pd.read_csv("train.txt", header=None, sep="\n")
# 按空白拆分所有行,打平为一维序列,自动去除空值
data = df[0].str.split(r"\s+", expand=True).stack().reset_index(drop=True)
# 如需转整数类型,追加以下代码
# data = data.astype(int)

注意:不建议通过修改on_bad_lines参数跳过异常行的方式读取,会直接丢失字段数不匹配行的内容,造成数据缺失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:48:20