If you want to take only the rows that have no NANs, this is the expression you need:
>>> import numpy as np
>>> a[~np.isnan(a).any(1)]
array([[ 1., 10.],
[ 5., 6.]])
If you want the rows that do not have a specific number among its elements, e.g. 5:
>>> a[~(a == 5).any(1)]
array([[ 1., 10.],
[ NaN, 6.],
[ 6., NaN]])
The latter is clearly equivalent to
>>> a[(a != 5).all(1)]
array([[ 1., 10.],
[ NaN, 6.],
[ 6., NaN]])
Explanation:
Let's first create your example input
>>> 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]])
This determines which elements are NAN
>>> np.isnan(a)
array([[False, False],
[False, False],
[ True, False],
[False, True]], dtype=bool)
This identifies which rows have any element which are True
>>> np.isnan(a).any(1)
array([False, False, True, True], dtype=bool)
Since we don't want these, we negate the last expression:
>>> ~np.isnan(a).any(1)
array([ True, True, False, False], dtype=bool)
And finally we use the boolean array to select the rows we want:
>>> a[~np.isnan(a).any(1)]
array([[ 1., 10.],
[ 5., 6.]])