在python中使用numpy获取平均值避免nan

时间:2013-11-08 06:00:39

标签: python arrays numpy

如何计算避免纳米的阵列(A)的平均值?

import numpy as np 
A = [5    nan    nan    nan    nan  10]
M = np.mean(A[A!=nan]) does not work
Any idea?

2 个答案:

答案 0 :(得分:18)

使用numpy.isnan

>>> import numpy as np 
>>> A = np.array([5, np.nan, np.nan, np.nan, np.nan, 10])
>>> np.isnan(A)
array([False,  True,  True,  True,  True, False], dtype=bool)
>>> ~np.isnan(A)
array([ True, False, False, False, False,  True], dtype=bool)
>>> A[~np.isnan(A)]
array([  5.,  10.])
>>> A[~np.isnan(A)].mean()
7.5

因为您无法将nannan进行比较:

>>> np.nan == np.nan
False
>>> np.nan != np.nan
True
>>> np.isnan(np.nan)
True

答案 1 :(得分:18)

另一种可能性如下:

import numpy
from scipy.stats import nanmean # nanmedian exists too, if you need it
A = numpy.array([5, numpy.nan, numpy.nan, numpy.nan, numpy.nan, 10])
print nanmean(A) # gives 7.5 as expected

我认为这看起来比已经提供的其他解决方案更优雅(和可读)

编辑:显然(@Jaime)报告此功能已经直接存在于最新的numpy(1.8)中,因此如果您拥有{{1}版本,则不再需要import scipy.stats }}:

numpy

第一个解决方案也适用于没有import numpy A = numpy.array([5, numpy.nan, numpy.nan, numpy.nan, numpy.nan, 10]) print numpy.nanmean(A) 最新版本的人(像我一样)