如何提取命名元组数组中某个字段的值
我刚开始学习Python,现在正在从MATLAB转过来。我之前是这样使用 namedtuple
类的。
from collections import namedtuple
import numpy as np
MyStruct = namedtuple("MyStruct", "field1 field2 field3")
d = []
d.append(MyStruct(field1=np.array(3,'int'),field2=np.array(4,'int'),field3=np.array(5,'int')))
d
d.append(MyStruct(field1=np.array(4,'int'),field2=np.array(5,'int'),field3=np.array(6,'int')))
这里的 d
是一个包含两个 namedtuple
对象的列表。我想要的是一种简单的方法,能够从 d
中获取所有 field1
的值,而不需要一个一个地去遍历 d
的元素。就像在MATLAB中,我们可以在结构体数组外面加上方括号一样。
如果有人能给我一些建议,我会非常感激。
Srini
2 个回答
1
这就是列表推导式的用途:
field1vals = [x.field1 for x in d]
0
这里有一些选择:
In [31]: x = np.array([(3,4,5),(4,5,6)],dtype=[('field1','i'),('field2','i'), ('field3', 'i')])
In [32]: x['field2']
Out[32]: array([4, 5])
In [33]: x = np.array([(3, 4, 5), (4, 5, 6)])
In [34]: x[:, 1]
Out[34]: array([4, 5])
In [35]: x = np.array([MyStruct(field1=3, field2=4, field3=5), MyStruct(field1=4, field2=5, field3=6)])
In [36]: x[:, 1]
Out[36]: array([4, 5])
或者,如果你需要不同的列有不同的数据类型,在你执行 import pandas as pd
之后:
In [41]: x = pd.DataFrame([MyStruct(field1=3, field2=4, field3=5), MyStruct(field1=4, field2=5, field3=6)], columns=['field1', 'field2', 'field3'])
In [42]: x.field2
Out[42]:
0 4
1 5
Name: field2, dtype: int64