我正在尝试用以下行读取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'))