首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强迫genfromtxt读取csv作为记录数组?

问如何强迫genfromtxt读取csv作为记录数组?
EN

Stack Overflow用户
提问于 2014-04-14 09:04:31
回答 1查看 602关注 0票数 1

我试图用下面的一行来阅读CSV:

代码语言:javascript
复制
raw_data = genfromtxt(datafile,delimiter='\t',dtype=None)

好的,这个函数在数据文件中遇到字符串数据时将这个文件读入记录数组。据我所知,当dtype为None时,也应该将文件读入记录数组。对吗?

但是,如果没有字符串数据而只显示数字数据,则此函数将数据读入ndarray。

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

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

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

从csv读取文件为ndarray raw_data = genfromtxt(datafile,delimiter='\t',dtype=None)

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

代码语言:javascript
复制
names_=['f'+str(i) for i in range(raw_data.shape[1])];
names=[(name,raw_data.dtype) for name in names_];

最后,创建记录数组:

代码语言:javascript
复制
raw_data_as_ra = raw_data.ravel().view(names);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-14 11:12:54

您可以使用recfromcsv,即源自from,而不是:

如果您的文件看起来像:

代码语言:javascript
复制
col1,col2,col3
1.1, 2.4, 3.2
4.1, 5.2, 6.3

那就这么做

代码语言:javascript
复制
a = np.recfromcsv('yourfile.csv')

给予:

代码语言:javascript
复制
rec.array([(1.1, 2.4, 3.2), (4.1, 5.2, 6.3)], 
      dtype=[('col1', '<f8'), ('col2', '<f8'), ('col3', '<f8')])

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

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

代码语言:javascript
复制
np.recfromcsv(datafile,delimiter='\t'))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23056069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档