从 numpy 结构化数组中的数据打印行
print row from a data in numpy structured array
我在 numpy 中有下一个结构化数组:
>>> matriz
rec.array([('b8:27:eb:07:65:ad', '0.130s', 255),
('b8:27:eb:07:65:ad', '0.120s', 215),
('b8:27:eb:07:65:ad', '0.130s', 168) ],
dtype=[('col1', '<U17'), ('col2', '<U17'), ('col3', '<i4'),
('col4','<U17')])
我需要在 'col3'
中找到小于 179 的数字,而且我还需要打印数字所在的行。
例如matriz
中小于179的数字是168,那么我需要打印
('b8:27:eb:07:65:ad', '0.130s', 168)
我做到了,
for j in matriz['col3']:
if j< 254:
print(j)
但我 168
只有整数,知道吗?。
而且,有人知道,如果有 pandas 库,我可以这样做吗?..
谢谢
您可以执行以下操作:
matrix = np.array([('b8:27:eb:07:65:ad', '0.130s', 255),
('b8:27:eb:07:65:ad', '0.120s', 215),
('b8:27:eb:07:65:ad', '0.130s', 168)],
dtype=[('col1', '<U17'),
('col2', '<U17'),
('col3', '<i4')])
for row in matrix:
if row['col3'] < 254:
print(row)
In [128]: arr=np.rec.array([('b8:27:eb:07:65:ad', '0.130s', 255),
...: ('b8:27:eb:07:65:ad', '0.120s', 215),
...: ('b8:27:eb:07:65:ad', '0.130s', 168) ],
...: dtype=[('col1', '<U17'), ('col2', '<U17'), ('col3', '<i4')])
这是一个包含 3 个字段的一维数组:
In [129]: arr
Out[129]:
rec.array([('b8:27:eb:07:65:ad', '0.130s', 255),
('b8:27:eb:07:65:ad', '0.120s', 215),
('b8:27:eb:07:65:ad', '0.130s', 168)],
dtype=[('col1', '<U17'), ('col2', '<U17'), ('col3', '<i4')])
我们可以查看一个字段:
In [130]: arr['col3']
Out[130]: array([255, 215, 168], dtype=int32)
并获取其值的布尔掩码:
In [131]: arr['col3']<179
Out[131]: array([False, False, True])
并将该掩码用于整个数组中的 select 个元素:
In [132]: arr[arr['col3']<179]
Out[132]:
rec.array([('b8:27:eb:07:65:ad', '0.130s', 168)],
dtype=[('col1', '<U17'), ('col2', '<U17'), ('col3', '<i4')])
因为它是一个rec.array
,而不仅仅是一个结构化数组,我们也可以将字段作为一个属性来访问:
In [135]: print(arr[arr.col3<254])
[('b8:27:eb:07:65:ad', '0.120s', 215) ('b8:27:eb:07:65:ad', '0.130s', 168)]
我在 numpy 中有下一个结构化数组:
>>> matriz
rec.array([('b8:27:eb:07:65:ad', '0.130s', 255),
('b8:27:eb:07:65:ad', '0.120s', 215),
('b8:27:eb:07:65:ad', '0.130s', 168) ],
dtype=[('col1', '<U17'), ('col2', '<U17'), ('col3', '<i4'),
('col4','<U17')])
我需要在 'col3'
中找到小于 179 的数字,而且我还需要打印数字所在的行。
例如matriz
中小于179的数字是168,那么我需要打印
('b8:27:eb:07:65:ad', '0.130s', 168)
我做到了,
for j in matriz['col3']:
if j< 254:
print(j)
但我 168
只有整数,知道吗?。
而且,有人知道,如果有 pandas 库,我可以这样做吗?..
谢谢
您可以执行以下操作:
matrix = np.array([('b8:27:eb:07:65:ad', '0.130s', 255),
('b8:27:eb:07:65:ad', '0.120s', 215),
('b8:27:eb:07:65:ad', '0.130s', 168)],
dtype=[('col1', '<U17'),
('col2', '<U17'),
('col3', '<i4')])
for row in matrix:
if row['col3'] < 254:
print(row)
In [128]: arr=np.rec.array([('b8:27:eb:07:65:ad', '0.130s', 255),
...: ('b8:27:eb:07:65:ad', '0.120s', 215),
...: ('b8:27:eb:07:65:ad', '0.130s', 168) ],
...: dtype=[('col1', '<U17'), ('col2', '<U17'), ('col3', '<i4')])
这是一个包含 3 个字段的一维数组:
In [129]: arr
Out[129]:
rec.array([('b8:27:eb:07:65:ad', '0.130s', 255),
('b8:27:eb:07:65:ad', '0.120s', 215),
('b8:27:eb:07:65:ad', '0.130s', 168)],
dtype=[('col1', '<U17'), ('col2', '<U17'), ('col3', '<i4')])
我们可以查看一个字段:
In [130]: arr['col3']
Out[130]: array([255, 215, 168], dtype=int32)
并获取其值的布尔掩码:
In [131]: arr['col3']<179
Out[131]: array([False, False, True])
并将该掩码用于整个数组中的 select 个元素:
In [132]: arr[arr['col3']<179]
Out[132]:
rec.array([('b8:27:eb:07:65:ad', '0.130s', 168)],
dtype=[('col1', '<U17'), ('col2', '<U17'), ('col3', '<i4')])
因为它是一个rec.array
,而不仅仅是一个结构化数组,我们也可以将字段作为一个属性来访问:
In [135]: print(arr[arr.col3<254])
[('b8:27:eb:07:65:ad', '0.120s', 215) ('b8:27:eb:07:65:ad', '0.130s', 168)]