2013-11-04 35 views
5

我试图加载的数据集是这样的:NumPy的loadtxt数据类型

Algeria,73.131000,6406.8166213983,0.1 
Angola,51.093000,5519.1831786593,2 
Argentina,75.901000,15741.0457726686,0.5 
Armenia,74.241000,4748.9285847709,0.1 

等。最后,我将只需要列1和2。我不需要国名和最后一列。实质上,我需要提取两个维度为nx1的矩阵。我知道我需要指定数据类型:

data=np.loadtxt('file.txt',delimiter=',',dtype=[('f0',str),('f1',float),('f2',float),('f3',float)]) 

然而,这将产生一个元组列表,

array([('', 73.131, 6406.8166213983, 0.1), 
    ('', 51.093, 5519.1831786593, 2.0),` 

,而不是

array(['',73.131,6406.8166213983,0.1], 
     ['',51.093, 5519.1831786593, 2.0], 

哪里错了吗?

+0

FWIW,你的输出不是一个元组列表,但[结构体数组](http://docs.scipy.org/doc/numpy/user/basics.rec.html)。您所需的输出,每行开头的空字符串不是一个选项,因为它具有混合的dtypes。只使用行'(1,2)'使这个问题无关紧要,因为它们都是浮动的。 – askewchan

回答

1

如果你只是想前两列,你可以使用genfromtxt

import numpy as np 
col1 = np.genfromtxt('yourfile.txt',usecols=(1),delimiter=',',dtype=None) 
col2 = np.genfromtxt('yourfile.txt',usecols=(2),delimiter=',',dtype=None) 

或者两者一起:

np.genfromtxt('yourfile.txt',usecols=(1,2),delimiter=',',dtype=None) 
0

你的“错误”是你设置你自己的dtype。如果你不想要你设置的dtype(我没有看到你不需要它的理由),你可以使用np.loadtxt()的skiprows和usecols参数来只加载你想要的列。

你的结果将是一个NumPy数组,其形状为(n,2),而不是(n,3),你认为你会有(其中n是你的行数)。

10

检查NumPy's文件。

x, y = np.loadtxt(c, delimiter=',', usecols=(1, 2), unpack=True) 

usecols参数应该完成您的工作。

+0

这是最好的答案,但用'usecols =(1,2)'来匹配OP的请求。 – askewchan