вывести строку из данных в структурированном массиве

1

У меня следующий структурированный массив в 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 я могу это сделать?..

Спасибо

Теги:
arrays
numpy
python-3.x

2 ответа

1
Лучший ответ

Вы можете сделать следующее:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню