【问题标题】:using genfromtxt to split data使用 genfromtxt 拆分数据
【发布时间】:2012-08-30 18:38:19
【问题描述】:

使用 Python,我使用 genfromtxt(来自 numpy)将文本文件读入数组:

y = np.genfromtxt("1400list.txt", dtype=[('mystring','S20'),('myfloat','float')])

这可以正常工作,只是它似乎没有将我的 2 列读入二维数组。我得到:

[('string001', 123.0),('string002', 456.0),('string002', 789.0)]

但我认为想要:

[['string001', 123.0],['string002', 456.0],['string002', 789.0]]

我基本上希望每条信息都作为一个单独的元素,然后我可以对其进行操作。

【问题讨论】:

    标签: python numpy genfromtxt


    【解决方案1】:

    genfromtxt 返回的内容称为结构化数组。它给出了一个一维元组数组,每个元组都有你指定的dtype

    一旦你学会了如何使用它们,它们实际上是非常有用的。你不能有一个带有浮点数和字符串的二维数组,但是有一个结构化数组,你可以!

    例如:

    import numpy as np
    from StringIO import StringIO
    s = """string001 123
           string002 456
           string002 789"""
    f = StringIO(s)
    y = np.genfromtxt(f, dtype=[('mystring', 'S20'), ('myfloat', float)])
    

    到目前为止,您所拥有的是什么。现在您可以通过以下方式访问y。您可以使用 字段名称 将列作为一维数组获取:

    >>> y['mystring']
    array(['string001', 'string002', 'string002'], 
      dtype='|S20')
    
    >>> y['myfloat']
    array([ 123.,  456.,  789.])
    

    请注意,y['myfloat'] 给出 floats 是因为 dtype 参数,即使在文件中它们是 ints。

    或者,您可以使用一个整数来获取一行作为tuple 与给定的dtype

    >>> y[1]
    ('string002', 456.0)
    

    如果您正在对此类数据结构进行大量操作,您可能需要查看pandas

    【讨论】:

      猜你喜欢
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 2021-03-03
      • 1970-01-01
      相关资源
      最近更新 更多