如何强制genfromtxt读取csv作为记录数组



我正在尝试用以下行读取CSV:

raw_data = genfromtxt(datafile,delimiter='t',dtype=None)

好的,当该文件遇到数据文件中的字符串数据时,此函数会将其读取到Record Array中。据我所知,当dtype为None时,文件也应该读取到Record Array中。这是正确的吗?

但是,如果没有字符串数据,只显示数字数据,则此函数会将数据读取到ndarray中。

如果没有,是否有一种方便的方法可以强制此函数将文件读取为记录数组?

ndarray的问题是,我所有的代码都是为了处理记录数组而构建的。

UPD1为了防止有人尝试这样做,这里有一个简单的解决方案。也许这个不是最好的,但至少它有效:

从csv中读取文件作为ndarrayraw_data = genfromtxt(datafile,delimiter='t',dtype=None)

生成列的默认名称和数据类型:

names_=['f'+str(i) for i in range(raw_data.shape[1])];
names=[(name,raw_data.dtype) for name in names_];

最后,创建记录数组:

raw_data_as_ra = raw_data.ravel().view(names);

您可以使用从genfromttxt派生的recfromcsv,而不是:

如果你的文件看起来像:

col1,col2,col3
1.1, 2.4, 3.2
4.1, 5.2, 6.3

然后进行

a = np.recfromcsv('yourfile.csv')

给出:

rec.array([(1.1, 2.4, 3.2), (4.1, 5.2, 6.3)], 
      dtype=[('col1', '<f8'), ('col2', '<f8'), ('col3', '<f8')])

请注意,recfromcsv使用第一行作为列/记录名称。

此外,您可以使用与genfromtxt相同的输入参数(例如delimiter参数)。如果您的文件是制表符分隔的,那么您的代码行可能是这样的:

np.recfromcsv(datafile,delimiter='t'))

相关内容

  • 没有找到相关文章

最新更新