Если вы хотите взять только те строки, которые не имеют 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.]])