在更改dtyp之后,genfromtxt只导入第一列

2024-04-19 04:04:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用genfromtxt导入包含各种类型数据的大型数据集。
我的原始代码运行良好(ucols是我要加载的列的列表):

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

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

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


Tags: 数据numpynonedatanp数组fnamecomments
1条回答
网友
1楼 · 发布于 2024-04-19 04:04:04

制作结构化数组并将其写入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')])

相关问题 更多 >