1

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

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

OK,这个函数在遇到数据文件中的字符串数据时,将这个文件读入Record Array。据我了解,当 dtype 为 None 时,文件也应该读入 Record Array。那是对的吗?

但是,如果没有字符串数据并且只显示数字数据,则此函数将数据读入 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);
4

1 回答 1

3

您可以使用派生自 genfromtxtrecfromcsv的,而不是:

如果您的文件如下所示:

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'))
于 2014-04-14T11:12:54.090 回答