【问题标题】:Using np.genfromtxt to read in data that contains arrays使用 np.genfromtxt 读取包含数组的数据
【发布时间】:2016-04-09 00:28:39
【问题描述】:

所以我试图读取一些看起来像这样的数据(这只是第一行):

1 14.4132966509 (-1.2936631396696465, 0.0077236319580324952,   0.066687939649724415) (-13.170491147387787, 0.0051387952329040587, 0.0527163312916894)

我正在尝试使用 np.genfromtxt 读取它:

skirt_data = np.genfromtxt('skirt_data.dat', names = ['halo', 'IRX', 'beta', 'intercept'], delimiter = ' ', dtype = None)

但它会返回这个:

ValueError: size of tuple must match number of fields.

我的问题是,我如何准确地加载数据中的数组,以便我可以提取该数组中的第一个数字?最终,我想做这样的事情来查看 beta 列的第一个值:

skirt_data['beta'][1]

提前致谢!

【问题讨论】:

  • 你的数据不是方表,有相当多的结构。我认为您应该编写自己的导入。使用纯 Python readlines 并根据只有您了解的结构将每一行分开。可以使用多个分隔符并仍然使用numpy 导入器,但它不会很优雅。
  • 那些() 会给genfromtxt 带来问题。它专为只有字段和分隔符的行而设计,没有引号或其他括号。但它会接受来自您自己的线路阅读器的输入(任何提供线路的东西)。所以你可以过滤掉(),用常规分隔符替换它们。

标签: python numpy genfromtxt


【解决方案1】:

如果每一行都相同,我会使用自定义解析器。

您可以使用 str.split(sep, optional max splits) 分割线

类似

names = [list from above]
output = {}
with open('skirt_data.dat') as sfd:
    for i, line in enumerate(sfd.readlines()):
        skirt_name = names[i]
        first_col, second_col, rest = line.split(' ', 2)
        output[skirt_name] = int(first_col)
print output

【讨论】:

  • 哇!我什至没有考虑编写自定义解析器。感谢您的提示(显然我是 python 新手)。所以我已经编辑了你的建议,看起来像这样:with open('skirt_data.dat') as sfd: for i, line in enumerate(sfd.readlines()): skirt_name = names[i] first_col, second_col, third_col, fourth_col = line.split(' ') output[skirt_name] = int(third_col[1]) print output 但现在它给了我这个错误:第 4 行的ValueError: too many values to unpack。有没有办法在这里使用 iteritems()?
  • 对不起,我没有看到评论。问题是一行中有超过 4 列,Python 不知道如何将 >4 个值放入 4 个变量中。我不会使用 iteritems,因为那是用于字典的,这是一个列表。您可以将吐出结果保存到一个列表中:cols = line.split(' '),然后检查它的长度,只有在它好的时候才保存它:if len(cols)> 4: first_col = col[0] ... 或将max_split 参数设置为拆分(第二个参数)为4,并且将行更改为first_col, second_col, third_col, fourth_col, rest = line.split(' ', 4) 额外的列转到rest
猜你喜欢
  • 2023-02-21
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 2017-04-18
  • 2015-05-14
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多