如果你想要仅获取没有NAN值的行,那么这就是你需要的表达式:
>>> import numpy as np
>>> a[~np.isnan(a).any(1)]
array([[ 1., 10.],
[ 5., 6.]])
如果你想要筛选出某个元素不包含特定数字的行,比如5:
>>> a[~(a == 5).any(1)]
array([[ 1., 10.],
[ NaN, 6.],
[ 6., NaN]])
后者显然等价于
>>> a[(a != 5).all(1)]
array([[ 1., 10.],
[ NaN, 6.],
[ 6., NaN]])
说明:
首先让我们创建您的示例输入。
>>> import numpy as np
>>> a = np.array([[1, 5, np.nan, 6],
... [10, 6, 6, np.nan]]).transpose()
>>> a
array([[ 1., 10.],
[ 5., 6.],
[ NaN, 6.],
[ 6., NaN]])
这确定哪些元素为 NaN。
>>> np.isnan(a)
array([[False, False],
[False, False],
[ True, False],
[False, True]], dtype=bool)
这将确定哪些行具有任何为True的元素。
>>> np.isnan(a).any(1)
array([False, False, True, True], dtype=bool)
由于我们不想要这些内容,因此我们否定了最后一个表达式:
>>> ~np.isnan(a).any(1)
array([ True, True, False, False], dtype=bool)
最后,我们使用布尔数组来选择我们想要的行:
>>> a[~np.isnan(a).any(1)]
array([[ 1., 10.],
[ 5., 6.]])