我试图用下面的一行来阅读CSV:
raw_data = genfromtxt(datafile,delimiter='\t',dtype=None)好的,这个函数在数据文件中遇到字符串数据时将这个文件读入记录数组。据我所知,当dtype为None时,也应该将文件读入记录数组。对吗?
但是,如果没有字符串数据而只显示数字数据,则此函数将数据读入ndarray。
如果没有,是否有一种方便的方法强制此函数读取文件为记录数组?
ndarray的问题是,我所有的代码都是为了处理记录数组而构建的。
UPD1只是为了防止有人尝试这样做,下面是一个简单的解决方案。也许这个并不是最好的,但至少它有效:
从csv读取文件为ndarray raw_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);发布于 2014-04-14 11:12:54
您可以使用recfromcsv,即源自from,而不是:
如果您的文件看起来像:
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'))https://stackoverflow.com/questions/23056069
复制相似问题