我有一个包含330,000多行的np.array。我仅尝试对其求平均值,但返回NaN。即使我尝试过滤掉数组中任何可能的NaN值(无论如何都不应该有),平均值仍然返回NaN。我是否做了什么完全疯狂的事情?
我的代码在这里:
average(ngma_heat_daily)
Out[70]: nan
average(ngma_heat_daily[ngma_heat_daily != nan])
Out[71]: nan
试试这个:
>>> np.nanmean(ngma_heat_daily)
在计算平均值之前,此函数会从您的数组中删除NaN值。
编辑: average(ngma_heat_daily[ngma_heat_daily != nan])
不起作用的原因是这个:
>>> np.nan == np.nan
False
根据IEEE浮点标准,NaN不等于自身!您可以使用以下方法实现相同的想法:
>>> average(ngma_heat_daily[~np.isnan(ngma_heat_daily)])
np.isnan
、np.isinf
和类似的函数对于这种类型的数据屏蔽非常有用。
np.isnan
、np.isinf
及其类似函数在数据屏蔽方面非常实用。
还有一个名为nanmedian的函数可以忽略NaN值。该函数的签名如下:numpy.nanmedian(a, axis=None, out=None, overwrite_input=False, keepdims=<no value>)