2010-07-20 26 views
1

我有一个文件,其中包含一个时间戳作为列,剩余的数字包含在其中。我可以正确加载一个或另一个,但不能同时加载。令人沮丧的挫折感了我......使用多种格式的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是时间戳,我要读它作为一个字符串。其余的我想作为花车阅读。有谁知道如何做到这一点?我尝试过与名字和dtypes混搭,但我无法获得任何工作。

谢谢。

回答

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,) 
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 

我认为你可以得到你所要寻找的通过指定的D型作为无(所以numpy为你选择dtypes):

file = np.genfromtxt('myfile.dat', skip_header = 1, usecols = (0,1,2,3,4),\ 
         dtype = None, delimiter = '\t') 

或者你可以明确地设置dtypes:

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')