genfromttxt只导入更改dtype后的第一列



我正在使用genfromttxt导入具有各种类型数据的巨大数据集
我的原始代码运行良好(ucolls是我想要加载的列的列表(:

data = np.genfromtxt(fname,comments = '#', skip_header=1, usecols=(ucols))

我的一些值是字符串,所以为了避免获得NaN的条目,我尝试设置dtype = None:

data = np.genfromtxt(fname, dtype = None,comments = '#', skip_header=1, usecols=(ucols)) 

现在由于某种原因,我只得到一列数据,IE是第一列。有人能解释一下我做错了什么吗?

编辑:我现在明白了,我应该获得一个1D结构化数组,它可以被引用来获得整行值。然而,我希望我的数据是一个numpy数组,是否可以使用dtype=None的genfromtxt,并且仍然获得一个numpyarray而不是结构化数组,或者是否有一种在两者之间快速转换的方法。尽管第二种方法不是优选的,除非它可以快速有效,因为我通常移动的值比当前实例大得多。

制作一个结构化数组并将其写入csv:

In [131]: arr=np.ones((3,), dtype='i,f,U10,i,f')
In [132]: arr['f2']=['a','bc','def']
In [133]: arr
Out[133]: 
array([(1, 1., 'a', 1, 1.), (1, 1., 'bc', 1, 1.), (1, 1., 'def', 1, 1.)],
dtype=[('f0', '<i4'), ('f1', '<f4'), ('f2', '<U10'), ('f3', '<i4'), ('f4', '<f4')])
In [134]: np.savetxt('test',arr,fmt='%d,%e,%s,%d,%f')
In [135]: cat test
1,1.000000e+00,a,1,1.000000
1,1.000000e+00,bc,1,1.000000
1,1.000000e+00,def,1,1.000000

加载dtype=None:的所有列

In [137]: np.genfromtxt('test',delimiter=',',dtype=None,encoding=None)
Out[137]: 
array([(1, 1., 'a', 1, 1.), (1, 1., 'bc', 1, 1.), (1, 1., 'def', 1, 1.)],
dtype=[('f0', '<i8'), ('f1', '<f8'), ('f2', '<U3'), ('f3', '<i8'), ('f4', '<f8')])

加载列的子集:

In [138]: np.genfromtxt('test',delimiter=',',dtype=None,encoding=None,usecols=
...: (1,2,4))
Out[138]: 
array([(1., 'a', 1.), (1., 'bc', 1.), (1., 'def', 1.)],
dtype=[('f0', '<f8'), ('f1', '<U3'), ('f2', '<f8')])

最新更新