找出当数据为str时满足数字条件的索引

时间:2018-10-29 13:51:03

标签: python numpy

我有这个数组

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 :(得分:2)

纯NumPy方法,您可以两次使用np.char.isnumericnp.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