Python 如何强制genfromtxt读取csv作为记录数组?
我试图通过以下行读取CSV:Python 如何强制genfromtxt读取csv作为记录数组?,python,csv,numpy,genfromtxt,Python,Csv,Numpy,Genfromtxt,我试图通过以下行读取CSV: raw_data = genfromtxt(datafile,delimiter='\t',dtype=None) 好的,当这个文件遇到数据文件中的字符串数据时,这个函数将它读入记录数组。据我所知,当dtype为None时,文件也应该读入记录数组。对吗 但是,如果没有字符串数据,只显示数字数据,则此函数会将数据读入ndarray 如果否,是否有一种方便的方法强制此函数将文件作为记录数组读取 ndarray的问题是,我所有的代码都是为了处理记录数组而构建的 UPD1
raw_data = genfromtxt(datafile,delimiter='\t',dtype=None)
好的,当这个文件遇到数据文件中的字符串数据时,这个函数将它读入记录数组。据我所知,当dtype为None时,文件也应该读入记录数组。对吗
但是,如果没有字符串数据,只显示数字数据,则此函数会将数据读入ndarray
如果否,是否有一种方便的方法强制此函数将文件作为记录数组读取
ndarray的问题是,我所有的代码都是为了处理记录数组而构建的
UPD1
为了防止有人尝试这样做,这里有一个简单的解决方案。这可能不是最好的,但至少它是有效的:
从csv中读取文件作为数据阵列
raw\u data=genfromtxt(数据文件,分隔符='\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);
您可以使用
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')])
也许只需指定所需的数据类型?每次我读取不同的CSV文件时,我可能会有数千列,但我不确定文件中会遇到哪些数据。ndarray到底有什么问题?它是否将整数转换为浮点数?或者我遗漏了更大的内容?抱歉,我忘了提及我对该文件的所有进一步分析都是围绕记录数组进行的,以便在不只是显示数字数据的情况下捕获一般情况。也许值得显示在处理代码中不起作用的内容。谢谢!我差点忘了这个函数。希望此函数能够读取没有名称的csv。再次感谢!
np.recfromcsv(datafile,delimiter='\t'))