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

使用numpy.loadtxt读取表格文本文件报错,如何转为表格形式?

解决numpy.loadtxt读取文本文件列数不匹配的问题

问题原因

报错ValueError: Wrong number of columns at line 6说明文件第6行按逗号分割后的列数和前面行不一致,numpy.loadtxt要求所有行的列数必须完全相同,格式不规整的行就会触发该错误。


解决方法

1. 先定位问题行的具体内容

运行这段代码,查看第6行的列数和实际内容,明确是多了逗号、少了逗号还是存在其他格式问题:

with open('PS.prg1903-001_KSK_LB__0_00001.txt', 'r') as f:
    for line_num, line in enumerate(f, start=1):
        col_count = line.strip().count(',') + 1
        print(f"第{line_num}行: {col_count}列")
        if line_num == 6:
            print(f"内容: {repr(line.strip())}")

2. 用pandas读取(新手首选)

pandas对不规整表格的兼容性远优于numpy,能自动处理或跳过错误行,直接生成标准表格:

import pandas as pd

# 跳过表头,跳过列数不符的行(pandas 1.4+用on_bad_lines='skip',旧版本用error_bad_lines=False)
df = pd.read_csv('PS.prg1903-001_KSK_LB__0_00001.txt', skiprows=1, on_bad_lines='skip')

# 查看前几行数据
print(df.head())

读取后得到的df是标准表格格式,后续做数据分析也更便捷。

3. 坚持用numpy的处理方案

如果必须使用numpy,可以手动过滤或补全列数不符的行:

import numpy as np

data_list = []
expected_cols = None

with open('PS.prg1903-001_KSK_LB__0_00001.txt', 'r') as f:
    # 跳过第一行表头
    next(f)
    for line in f:
        line = line.strip()
        if not line:
            continue
        parts = line.split(',')
        # 确定预期列数(取第一行有效数据的列数)
        if expected_cols is None:
            expected_cols = len(parts)
        # 列数匹配才加入列表,否则跳过(也可以用注释里的代码补全空值)
        if len(parts) == expected_cols:
            data_list.append(parts)
        # else:
        #     # 补全空值到预期列数
        #     parts += [''] * (expected_cols - len(parts))
        #     data_list.append(parts)

# 转为numpy数组
data = np.array(data_list, dtype=str)
print(data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:55:15