为了账号安全,请及时绑定邮箱和手机立即绑定

从数据文件中获取具有列标题和数据列的python映射

从数据文件中获取具有列标题和数据列的python映射

红颜莎娜 2021-03-19 23:23:55
我有一个具有以下格式的文件:# a, b, c0.1   0   00.2 0.4 0.5  4   5 0.90.3   0  10这是与数据的3列的文件和这些列的名称是a,b和c。当前要读取这些数据,我使用:def readdata(filename):    a, b, c = np.loadtxt(filename, unpack=True)    return a, b, c但是相反,我想readdata返回一个映射mydata,{column title, numpy array}以便可以调用mydata["a"]以获取第一列。如果文件具有新列(d, e, f...),我希望此功能正常工作。如何做到这一点(尽可能避免不必要的复制)?
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

np.genfromtxt如果您使用关键字numpy调用此功能,则此功能将提供该功能names=True。


例子:


>>> s = """# a, b, c

... 0.1 0 0

... 0.2 0.4 0.5

... 4 5 0.9

... 0.3 0 10

... """

>>> data = np.genfromtxt(StringIO(s),names=True)

>>> data['a']

array([ 0.1,  0.2,  4. ,  0.3])

>>> data['b']

array([ 0. ,  0.4,  5. ,  0. ])

>>> data['c']

array([  0. ,   0.5,   0.9,  10. ])


查看完整回答
反对 回复 2021-03-27
?
HUWWW

TA贡献1874条经验 获得超12个赞

使用此文件:


#a, b, c

0.1   0   0

0.2 0.4 0.5

  4   5 0.9

0.3   0  10

假设您的第一行定义了标题行,在Numpy中,您可以执行以下操作:


首先,阅读标题行:


>>> with open('/tmp/testnp.txt','r') as f:

...    header=[n.strip() for n in f.readline().strip().lstrip('#').split(',')]

... 

>>> header

['a', 'b', 'c']

现在,在Numpy中创建一个结构化数组,其名称与标题中的字段相同:


>>> import numpy as np

>>> struct=[(name,'float') for name in header]

>>> data=np.loadtxt('/tmp/testnp.txt',dtype=struct,comments='#')

>>> data

array([(0.1, 0.0, 0.0), (0.2, 0.4, 0.5), (4.0, 5.0, 0.9), (0.3, 0.0, 10.0)], 

      dtype=[('a', '<f8'), ('b', '<f8'), ('c', '<f8')])

>>> data['a']

array([ 0.1,  0.2,  4. ,  0.3])


查看完整回答
反对 回复 2021-03-27
  • 3 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信