2

使用 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]]

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

4

1 回答 1

1

genfromtxt返回的称为结构化数组。它给出了一个tuples 的一维数组,每个 tuple 都有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以下方式访问。您可以使用字段名称将列作为一维数组获取:

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

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

请注意,由于参数而y['myfloat']给出s ,即使在文件中它们是s。floatdtypeint

或者,您可以使用一个整数来获得一行作为 atuple给定的dtype

>>> y[1]
('string002', 456.0)

如果您正在对这样的数据结构进行大量操作,您可能需要研究pandas

于 2013-03-15T16:57:17.340 回答