Python 2.7 无法将制表符分隔的文件读入numpy二维数组

Python 2.7 无法将制表符分隔的文件读入numpy二维数组,python-2.7,numpy,genfromtxt,Python 2.7,Numpy,Genfromtxt,我是nympy的新手,正在尝试使用以下代码将制表符(\t)分隔的文本文件读入numpy数组矩阵: train_data = np.genfromtxt('training.txt', dtype=None, delimiter='\t') 文件内容: 38 Private 215646 HS-grad 9 Divorced Handlers-cleaners Not-in-family White Male 0 0 40 United

我是nympy的新手,正在尝试使用以下代码将制表符(\t)分隔的文本文件读入numpy数组矩阵:

train_data = np.genfromtxt('training.txt', dtype=None, delimiter='\t')
文件内容:

38   Private    215646   HS-grad    9    Divorced    Handlers-cleaners   Not-in-family   White   Male   0   0   40   United-States   <=50K
53   Private    234721   11th   7    Married-civ-spouse  Handlers-cleaners   Husband     Black   Male   0   0   40   United-States   <=50K
30   State-gov  141297   Bachelors  13   Married-civ-spouse  Prof-specialty  Husband     Asian-Pac-Islander  Male   0   0   40   India   >50K
有什么建议吗


谢谢

我不相信Numpy数组在单个数组中处理不同的数据类型。可以做的是,将整个数组作为字符串加载,然后根据需要将必要的列转换为数字

# Load data as strings
train_data = np.loadtxt('try.txt', dtype=np.str, delimiter='\t')

# Convert numeric strings into integers
first_col = train_data[:,0].astype(np.int)
third_col = train_data[:,2].astype(np.int)
最新答案 对不起,我误解了你原来的问题:

我期望的是形状为(3,15)的二维阵列矩阵

但是使用上面的代码,我只得到了一个shape(3,)的单行数组

我想你误解了
np.genfromtxt()
将返回的内容。在本例中,它将尝试推断文本文件中每个“列”的类型,并返回一个值。每行将包含多个字段(
f0…f14
),每个字段可以包含与文本文件中的“列”相对应的不同类型的值。您可以按名称索引特定字段,例如
数据['f0']

您不能拥有异构类型的
(3,15)
numpy数组。您可以有一个
(3,15)
同构字符串数组,例如:

>>> string_data = np.genfromtext('test', dtype=str, delimiter='\t')
>>> print string_data.shape
(3, 15)

当然,您可以手动将列强制转换为您想要的任何类型,如@DrRobotNinja的答案所示。但是,您也可以让numpy为您创建一个结构化数组,然后按字段对其进行索引,并将列分配给新数组。

实际上,这里的问题是
np.genfromtxt
np.loadtxt
如果数据类型是结构化的(即,具有多个类型),则都返回a。您的数组报告的形状为
(3,)
,因为从技术上讲,它是一个1d“记录”数组。这些“记录”保存您的所有列,但您可以访问所有数据,就好像它是二维的一样

您正在正确加载它:

[82]中的
:d=np.genfromtxt('tmp',dtype=None)
如您所述,它具有1d形状:

[83]中的
:d形
Out[83]:(3,)
但你所有的数据都在那里:

[84]:d中的

出[84]:
数组([(38,'Private',215646,'HS grad',9,'离异','不在家','白人','男性',0,0,40,'美国','35]['income']
出[109]:

数组(['您是否尝试过声明类似“dtype=String”的内容?哦,我可以使用更传统的文件读取(使用csv读取器)来解决此问题谢谢@abiessu.dtype=np.str工作正常,但我不想将它们全部转换为字符串。因此,我依靠dtype=None为我执行自动类型转换,在处理数字时,它赋予“int”或“float”比字符串更高的优先级。实际上,numpy数组可以具有结构化的数据类型,请参阅我的答案。@在numpy,似乎无法处理不同的场类型来建立二维阵列,所以机器人忍者博士的答案是相当正确的helpful@ngeek我鼓励您了解numpy如何在单个数组中处理不同的字段类型,而不是试图通过将所有数字转换为字符串来智胜它。这可能非常有用!请参阅这里还有另外两个答案。
>>> string_data = np.genfromtext('test', dtype=str, delimiter='\t')
>>> print string_data.shape
(3, 15)