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

使用numpy.genfromtxt读取CSV指定列时触发ValueError(获取3列而非1列)的问题咨询

解决numpy.genfromtxt读取CSV指定列时的ValueError问题

我碰到过类似的情况,咱们一步步来拆解问题:

首先,你报错的ValueError: got 3 columns instead of 1意思很明确:当读取第4列(索引3,因为numpy是0开始计数)时,某一行只有3个字段,根本找不到第4个列,所以触发了错误。而读取索引1(第二列)和索引2(第三列)时没问题,说明这两个列在所有行里都存在。

问题根源排查

你可以先手动验证CSV文件的格式:

  • 打开AOM_8.csv,直接跳到第10行(因为skip_header=9会跳过前9行),检查每一行是不是都有3个逗号(也就是分成4列)。大概率是某一行少了一个逗号,或者末尾的字段为空且没保留逗号,导致该行被解析成3列。
  • 比如某一行写成了10,0.0001,4.0225493而不是10,0.0001,4.0225493,6.1053924,这样genfromtxt就会把它识别成3列,读取索引3时自然报错。

快速定位异常行的代码

用这段代码可以自动扫描所有行的字段数,快速找到出问题的行:

import numpy as np
import os

file = 'E:/TPA/AOM_8.csv'
file = os.path.normpath(file)
# 读取所有行,保留原始格式,查看每行的字段数
raw_data = np.genfromtxt(file, delimiter=',', skip_header=9, dtype=None, encoding='utf-8')
for idx, row in enumerate(raw_data):
    print(f"第{idx+1}行(跳过前9行后)的字段数:{len(row)}")

运行后就能看到哪一行的字段数不是4,找到后去CSV里修正格式即可。

临时替代方案(不推荐长期使用)

如果暂时没法修改CSV文件,可以让genfromtxt跳过异常行,同时用缺失值填充:

y = np.genfromtxt(file, delimiter=',', usecols=3, skip_header=9, invalid_raise=False, filling_values=np.nan)

不过这个方案会丢失异常行的数据,还是优先修正CSV格式更稳妥。

另外再确认一句:你设置的usecols=3是对的(对应Data collector2列),问题核心还是CSV文件的行格式不一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:43:13