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

numpy.genfromtxt设置deletechars='/'首列仍生成默认列名问题咨询

问题原因分析

你对deletechars参数的理解存在偏差,这个参数的作用是在完成表头字段拆分后,删除每个列名字符串中包含的指定字符,不会修改原始表头的结构,也不会跳过行首的特定字符。

你遇到的问题根源:

  • 表头行以/开头,numpy拆分表头字段时会把/识别为第一个列名,导致表头总字段数比实际数据的列数多1,触发「Header Information does not match array」报错
  • 后续deletechars="/"会把第一个列名的/删除,得到空列名,numpy会自动将空列名替换为f0,就出现了你看到的输出结果
解决方法

方法1:手动指定列名(最稳妥)

直接预定义表头字段列表,读取时跳过原始表头行即可,注意调整usecols的索引(因为去掉了多余的第一个表头字段,原有索引需要全部减1):

# 预定义列名(已去掉开头的/)
col_names = ["Line", "Aircraft", "Flight", "Date", "JulL", "Time", "DateU", "TimeU", "Zn", "Easting", "Northing", "Lat", "Long", "xTrack", "ZFid_ms", "KFid", "AFid", "TFRAWT", "TFUNCT", "Mag4D", "VecX", "VecY", "VecZ", "VecTF", "MagRatio", "GPSHt", "Undul", "Sats", "HDop", "DGPS", "RadAlt", "BaroHPa", "Temp", "Humid", "CurrAmps", "Dn", "Up", "Samp", "Live", "RawTC", "RawK", "RawU", "RawTh", "Cosm", "LRange", "LStr", "LErr"]
# 跳过原始表头行,使用自定义列名
data = np.genfromtxt(filename, skip_header=1, usecols=(0,17,19,20,21,22), invalid_raise=False, names=col_names, dtype=None)

方法2:预处理表头去除行首/

先读取文件内容,删除表头开头的/后再传给genfromtxt解析,不需要调整usecols索引:

from io import StringIO
with open(filename, 'r', encoding='utf-8') as f:
    content = f.read()
# 仅删除第一行开头的/
processed_content = content.lstrip('/')
data = np.genfromtxt(StringIO(processed_content), usecols=(0,18,20,21,22,23), invalid_raise=False, names=True, dtype=None)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:30:02