numpy.loadtxt与制表符分隔值:数据类型无法识别
我在用 numpy.loadtxt
导入制表符分隔的值时遇到了问题。
我需要导入的行大致是这个样子的:
01-Aug-2013 1143_051-100 r 702 135 32 7
我只想读取第0、2、3、4、5、6列。目前我做的代码是:
numpy.loadtxt(test,dtype= (str,str,int,int,int,int), delimiter= "\t", usecols = (0,2,3,4,5,6))
但是这段代码返回了 data type not understood
的错误。我漏掉了什么呢?
1 个回答
1
为了实现快速的索引,NumPy需要每种数据类型(dtype)都有固定的宽度。所以如果你指定了字符串类型的数据,你还得告诉它这个字符串占用了多少字节。
dtype = '|S11,|S1,<i4,<i4,<i4,<i4'
这样就可以处理你提供的数据了。
不过,当字符串的长度不固定时,使用 np.genfromtxt
会更简单,而不是 np.loadtxt
,因为你可以指定 dtype=None
,这样 np.genfromtxt
就会自动猜测每一列的数据类型。
In [15]: np.genfromtxt('data', delimiter='\t', dtype=None, usecols=(0,2,3,4,5,6))
Out[15]:
array(('01-Aug-2013', 'r', 702, 135, 32, 7),
dtype=[('f0', 'S11'), ('f1', 'S1'), ('f2', '<i4'), ('f3', '<i4'), ('f4', '<i4'), ('f5', '<i4')])
或者
In [16]: np.loadtxt('data', delimiter='\t', dtype='|S11,|S1,<i4,<i4,<i4,<i4', usecols=(0,2,3,4,5,6))
Out[16]:
array(('01-Aug-2013', 'r', 702, 135, 32, 7),
dtype=[('f0', 'S11'), ('f1', 'S1'), ('f2', '<i4'), ('f3', '<i4'), ('f4', '<i4'), ('f5', '<i4')])