我有这个数组
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
。
答案 0 :(得分:2)
纯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]
答案 1 :(得分:2)
您第二次不需要np.where
,则可以直接切片idx
:
idx, = np.where(x[:, 1] != 'Nb v')
print (idx[x[idx, 1].astype(int) > 2])
# array([3], dtype=int64)
答案 2 :(得分:1)
尝试将字符串能否转换为整数。
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