从数组中删除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