The best answers to the question “Removing nan values from an array” in the category Dev.
I want to figure out how to remove nan values from my array. My array looks something like this:
x = [1400, 1500, 1600, nan, nan, nan ,1700] #Not in this exact configuration
How can I remove the
nan values from
filter(lambda v: v==v, x)
works both for lists and numpy array
since v!=v only for NaN
If you’re using numpy for your arrays, you can also use
x = x[numpy.logical_not(numpy.isnan(x))]
x = x[~numpy.isnan(x)]
[Thanks to chbrown for the added shorthand]
The inner function,
numpy.isnan returns a boolean/logical array which has the value
True everywhere that
x is not-a-number. As we want the opposite, we use the logical-not operator,
~ to get an array with
Trues everywhere that
x is a valid number.
Lastly we use this logical array to index into the original array
x, to retrieve just the non-NaN values.
For me the answer by @jmetz didn’t work, however using pandas isnull() did.
x = x[~pd.isnull(x)]
import math print [value for value in x if not math.isnan(value)]
For more, read on List Comprehensions.