如何在numpy数组中满足条件时提取整个行和列

时间:2018-05-29 09:04:51

标签: python arrays numpy

我有一个这种形式的numpy数组:

array([['A', 2.2, 9.1],
   ['A', 7.1, 2.3],
   ['B', 4.1, 1.1]],dtype=object)

所以我想查询'A'然后返回所有行和列(匹配)字符串'A'。任何与条件不匹配的内容都会被忽略。所以输出应该是:

form = array([['A', 2.2, 9.1],
              ['A', 7.1, 2.3],dtype=object)

我尝试使用j = form[np.where(form == 'A')]

给出了array(['A', 'A'], dtype=object)。这不是我想要的。

有人可以告诉我怎么做吗?

4 个答案:

答案 0 :(得分:1)

使用np.where()时可以对数组进行切片,以便只使用第一列:

form = np.array([['A', 2.2, 9.1],
   ['A', 7.1, 2.3],
   ['B', 4.1, 1.1]],dtype=object)

j = form[np.where(form[:,0]=='A')]
print (j)
# [['A' 2.2 9.1]
#  ['A' 7.1 2.3]]

答案 1 :(得分:1)

您可以避免像这样使用where

form = np.array([['A', 2.2, 9.1],
             ['A', 7.1, 2.3],
             ['B', 4.1, 1.1]])

print(form[form[:,0] == 'A'])

# [['A' 2.2 9.1] 
#  ['A' 7.1 2.3]]

答案 2 :(得分:0)

尝试创建列表推导然后在其中我们通过'A'的长度迭代,然后检查列表中的i是否是索引为import numpy as np test = np.array([['A', 2.2, 9.1], ['A', 7.1, 2.3], ['B', 4.1, 1.1]],dtype=object) print(test[[i for i in range(len(test)) if 'A' in test[i]]]) 的元素:

[['A' 2.2 9.1]
 ['A' 7.1 2.3]]

输出:

{{1}}

答案 3 :(得分:0)

快速而肮脏的方式:

import numpy as np
form = np.array([row for row in form_original if row[0] == "A"])