9

Similar to this question I would like to remove some NAN's from a 2-D numpy array. However, instead of removing an entire row that has NAN's I want to remove the corresponding element from each row of the array. For example (using list format for simplicity)

x=[ [1,2,3,4],
    [2,4,nan,8],
    [3,6,9,0] ]

would become

x=[ [1,2,4],
    [2,4,8],
    [3,6,0] ]

I can imagine using a numpy.where to figure out where in each row the NAN's appear and then use some loops and logic statements to make a new array from the old array (skipping over the NAN's and the corresponding elements in the other rows) but that to me doesn't seem to be a very streamlined way to do things. Any other ideas?

Community
  • 1
  • 1
NeutronStar
  • 2,057
  • 7
  • 31
  • 49
  • the long [thread](https://stackoverflow.com/questions/11620914/how-do-i-remove-nan-values-from-a-numpy-array) – Manuel F Nov 29 '22 at 21:31

1 Answers1

12

You could use boolean indexing to select only those columns which do not contain nan:

>>> x[:, ~np.isnan(x).any(axis=0)]
array([[ 1.,  2.,  4.],
       [ 2.,  4.,  8.],
       [ 3.,  6.,  0.]])

(This is nearly identical to the answer you've linked to; only the axes have been switched.)

Alex Riley
  • 169,130
  • 45
  • 262
  • 238