Skip to main content
 首页 » 编程设计

python之使用 genfromtxt 拆分数据

2025年05月04日10jiqing9006

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

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

它工作正常,除了它似乎没有将我的 2 列读入二维数组。我得到:

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

但我认为会喜欢:

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

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

请您参考如下方法:

genfromtxt 返回的内容称为结构化数组。它给出了一个一维元组数组,每个元组都有您指定的dtype。

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

例如:

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.]) 

请注意,由于 dtype 参数,y['myfloat'] 给出了 float,即使在文件中它们是 ints.

或者,您可以使用整数来获取具有给定 dtype 的行作为 tuple:

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

如果您要像这样对数据结构进行大量操作,您可能需要查看 pandas