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

使用numpy loadtxt/genfromtxt指定列名时返回空数组,求助排查

问题原因与解决方法

核心问题在于使用结构化数据类型时未指定字符串长度,numpy无法自动推断合适的字符串存储长度,导致读取的内容无法存入字段,最终显示为空;另外genfromtxt的默认注释处理逻辑虽能识别列名,但同样受字符串长度未指定的影响。


解决方法1:给结构化dtype指定字符串长度

使用loadtxt时,明确每个字符串字段的长度(比如根据数据实际长度设为U5),表头行因以#开头会被默认当作注释跳过,无需额外设置:

import numpy as np
result = np.loadtxt('test.csv', delimiter='|', dtype=[('a', 'U5'), ('b', 'U5'), ('c', 'U5')])
print(result)

输出:

array([('foo ', 'fooo ', 'foooo'), ('bar ', 'barr ', 'barrr')],
      dtype=[('a', '<U5'), ('b', '<U5'), ('c', '<U5')])

解决方法2:genfromtxt指定字符串长度

同样需指定字符串长度,默认comments='#'会自动去掉表头行的#并提取列名:

import numpy as np
result = np.genfromtxt('test.csv', delimiter='|', names=True, dtype='U5')
print(result)

输出:

array([('foo ', 'fooo ', 'foooo'), ('bar ', 'barr ', 'barrr')],
      dtype=[('a', '<U5'), ('b', '<U5'), ('c', '<U5')])

额外说明:显式跳过表头行

如果希望不依赖默认注释逻辑,可显式设置skiprows=1跳过第一行,同时指定字符串长度:

np.loadtxt('test.csv', delimiter='|', skiprows=1, dtype=[('a', 'U5'), ('b', 'U5'), ('c', 'U5')])

内容的提问来源于stack exchange,提问作者A.Manfreda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:23:09