У меня следующий структурированный массив в 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
только int, любую идею?.
и, кто-то знает, если с помощью библиотеки 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')])
Это 1-й массив с тремя полями:
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])
и используйте эту маску для выбора элементов из всего массива:
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)]