使用Numpy.genfromtxt上传多种格式的数据
我有一个文件,其中有一列是时间戳,其他列都是数字。我可以正确加载其中一个,但不能同时加载两个。这让我非常沮丧……
我现在的做法是:
import numpy as np
file = np.genfromtxt('myfile.dat', skip_header = 1, usecols = (0,1,2,3), dtype = (str, float), delimiter = '\t')
所以第0列是时间戳,我想把它当作字符串来读取。其他的我想当作浮点数来读取。有没有人知道怎么做到这一点?我试着调整了一下名字和数据类型,但就是没法让它正常工作。
谢谢。
2 个回答
2
如果我有一个用制表符分隔的文件,内容看起来像这样:
# Header Stuff
12:53:16 1.1111 2.2222 3.3333 4.4444
12:53:17 5.5555 6.6666 7.7777 8.8888
12:53:18 9.9999 10.0000 11.1111 12.1212
我觉得你可以通过以下两种方式来获取你想要的结果:第一种是把数据类型设置为None(这样numpy会自动为你选择数据类型):
file = np.genfromtxt('myfile.dat', skip_header = 1, usecols = (0,1,2,3,4),\
dtype = None, delimiter = '\t')
或者你也可以明确地设置数据类型:
file = np.genfromtxt('myfile.dat', skip_header = 1, usecols = (0,1,2,3,4), \
dtype=[('mytime','S8'),('myfloat1','f8'),('myfloat2','f8'),('myfloat3','f8')], \
delimiter = '\t')
3
也许可以试试这个:
import numpy as np
data = np.genfromtxt('myfile.dat',
skiprows=1,
usecols = (0,1,2,3),
dtype = '|S10,<f8,<f8,<f8',
delimiter = '\t')
print(data)
# [('2010-1-1', 1.2, 2.2999999999999998, 3.3999999999999999)
# ('2010-2-1', 4.5, 5.5999999999999996, 6.7000000000000002)]
print(data.dtype)
# [('f0', '|S10'), ('f1', '<f8'), ('f2', '<f8'), ('f3', '<f8')]
print(data.shape)
# (2,)