узнать индексы, где выполняется числовое условие, когда данные str - PullRequest
0 голосов
/ 29 октября 2018

У меня есть этот массив

x = np.array([['1', 'Nb v'],
              ['2', '2'],
              ['3', 'Nb v'],
              ['4','3']])

Я хочу узнать индексы, где второй столбец больше 2. Это третий индекс (последняя строка).

Поскольку данные являются строковыми, я не могу просто преобразовать строку в int, потому что у меня проблема с Nb v.

Итак, я подумал выяснить, где у меня нет слова Nb v.

idx, = np.where(x[:, 1] != 'Nb v')

дает:

array([1, 3])

, а затем найдите индексы, где значение больше 2:

new_idx, = np.where(x[idx, 1].astype(int) > 2)

дает:

array([1])

но это дает индекс idx, где это происходит, а не индекс x.

Я хочу узнать индекс / индексы x, где второй столбец - > 2.

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Чистый метод NumPy, вы можете использовать np.char.isnumeric и np.where дважды:

x_slice = x[:, 1]
x_int = np.where(np.char.isnumeric(x_slice), x_slice, 0).astype(int)
idx = np.where(x_int > 2.0)[0]

array([3], dtype=int64)

Или используйте np.where, следуя по индексу:

x_numeric = np.where(np.char.isnumeric(x[:, 1]))[0]
idx = x_numeric[x[x_numeric, 1].astype(int) > 2]
0 голосов
/ 29 октября 2018

Вам не нужно np.where во второй раз, вы можете нарезать прямо idx:

idx, = np.where(x[:, 1] != 'Nb v')
print (idx[x[idx, 1].astype(int) > 2])
# array([3], dtype=int64)
0 голосов
/ 29 октября 2018

Попробуйте, можно ли преобразовать строку в целое число или нет.

import numpy as np
x = np.array([['1', 'Nb v'],['2', '2'],['3', 'Nb v'],['4','3']])


for i,j in enumerate(x):
    try:
        a=int(j[1])
        if a>2:
            print(i)
    except:
        pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...