Reputation:
I have a numpy array that has certain rows filled exclusively with "nan", i.e.:
print(ar2[1560])
[ nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan nan nan nan]
What I need is to get rid of all such lines from this numpy array, without messing up with the order of my elements, i.e. maintain the sorting. I have tried the following:
ar3=ar2[:,~np.all(np.isnan(ar2))]
but this will only replace my "nan" with "False".
I have also tried the following as well:
ar3 = ar2[~np.isnan(ar2)]
but it converts my 2d numpyarray to a 1d numpyarray.
I am aware that a solution would be to convert my numpy array to a data frame, then drop the "nan" values and then convert it back to a numpy array, but I would like to know if there is a more direct approach, exclusively within the numpy package (and other than making a huge "for" loop and iterating over everything). Thank you.
Upvotes: 2
Views: 3046
Reputation:
Nevermind, found it:
ar3=ar2[~np.isnan(ar2).any(axis=1)]
Thanks anyway
Upvotes: 4