从数组中删除nan值

我想弄清楚如何从我的数组中删除nan值。 它看起来像这样:

x = [1400, 1500, 1600, nan, nan, nan ,1700] #Not in this exact configuration 

我相对较新的Python,所以我还在学习。 有小费吗?

尝试这个:

 import math print [value for value in x if not math.isnan(value)] 

欲了解更多,请阅读列表理解 。

如果你使用numpy作为数组,你也可以使用

 x = x[numpy.logical_not(numpy.isnan(x))] 

等价

 x = x[~numpy.isnan(x)] 

[感谢chbrown添加的简写]

说明

内部函数numpy.isnan返回一个布尔值/逻辑数组,在x不是数字的任何地方都有值为True的值。 正如我们想要的相反,我们使用逻辑非运算符~来获得一个True的数组,其中x 一个有效的数字。

最后,我们使用这个逻辑数组索引到原始数组x ,只检索非NaN值。

 filter(lambda v: v==v, x) 

既适用于列表和numpy数组,因为v!= v只适用于NaN

对我来说,@ jmetz的答案不起作用,然而使用pandasisnull()做。

 x = x[~pd.isnull(x)] 

做到以上:

 x = x[~numpy.isnan(x)] 

要么

 x = x[numpy.logical_not(numpy.isnan(x))] 

我发现重置到相同的variables(x)并没有删除实际的nan值,而必须使用不同的variables。 设置为一个不同的variables删除了nans。 例如

 y = x[~numpy.isnan(x)] 

最简单的方法是:

 numpy.nan_to_num(x) 

文档: https : //docs.scipy.org/doc/numpy/reference/generated/numpy.nan_to_num.html