numpy.loadtxt与制表符分隔值:数据类型无法识别

2 投票
1 回答
4997 浏览
提问于 2025-04-18 13:56

我在用 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')])

撰写回答