在不显式去除NaN而是忽略它们的情况下,能否计算列表的中位数?
我想要median([1,2,3,NaN,NaN,NaN,NaN,NaN,NaN])
等于2,而不是NaN。
numpy 1.9.0 版本具有函数nanmedian
:
nanmedian(a, axis=None, out=None, overwrite_input=False, keepdims=False)
Compute the median along the specified axis, while ignoring NaNs.
Returns the median of the array elements.
.. versionadded:: 1.9.0
例如。
>>> from numpy import nanmedian, NaN
>>> nanmedian([1,2,3,NaN,NaN,NaN,NaN,NaN,NaN])
2.0
如果您无法使用numpy的1.9.0版本,则类似@Parker的答案将起作用;例如。>>> import numpy as np
>>> x = np.array([1,2,3,NaN,NaN,NaN,NaN,NaN,NaN])
>>> np.median(x[~np.isnan(x)])
2.0
或者>>> np.median(x[np.isfinite(x)])
2.0
(当应用于布尔数组时,~
是一元运算符表示not
。)
x = x[numpy.logical_not(numpy.isnan(x))]
其中x
是要获取中位数的列表。import math
x = [value for value in x if not math.isnan(value)]
然后,只需使用清理过的列表即可获得中位数:`median(x)`
median
将忽略NaN
值:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.median.html#pandas.Series.median - EdChum