使用genfromtxt分割数据

时间:2012-09-06 01:00:46

标签: python numpy genfromtxt

使用Python,我使用genfromtxt(来自numpy)将文本文件读入数组:

y = np.genfromtxt("1400list.txt", dtype=[('mystring','S20'),('myfloat','float')])

哪个可行,但它似乎没有将我的2列读入2D数组。我得到了:

[('string001', 123.0),('string002', 456.0),('string002', 789.0)]

但我认为希望:

[['string001', 123.0],['string002', 456.0],['string002', 789.0]]

我基本上希望每条信息都是一个单独的元素,然后我可以操作。

1 个答案:

答案 0 :(得分:1)

genfromtxt返回的内容称为结构化数组。它提供 1d元组数组,每个元组都有你指定的dtype

一旦您学会了如何使用它们,这些实际上非常有用。你不能拥有一个带有浮点数和字符串的二维数组,但是你可以使用结构化数组!

例如:

import numpy as np
from StringIO import StringIO
s = """string001 123
       string002 456
       string002 789"""
f = StringIO(s)
y = np.genfromtxt(f, dtype=[('mystring', 'S20'), ('myfloat', float)])

到目前为止,这是你所拥有的。现在,您可以按以下方式访问y。您可以使用字段名称将列作为1d数组:

>>> y['mystring']
array(['string001', 'string002', 'string002'], 
  dtype='|S20')

>>> y['myfloat']
array([ 123.,  456.,  789.])

请注意,由于y['myfloat']参数,float会提供dtype,即使文件中的int为{。}}。

或者,您可以使用整数来获取具有给定tuple的{​​{1}}行:

dtype

如果您正在对此类数据结构进行大量操作,您可能需要查看pandas