是否可以在不显式删除NaN的情况下计算列表的中位数,而是忽略它们?删除了NaN值的列表的中位数,在python中
我想median([1,2,3,NaN,NaN,NaN,NaN,NaN,NaN])
是2,而不是NaN。
是否可以在不显式删除NaN的情况下计算列表的中位数,而是忽略它们?删除了NaN值的列表的中位数,在python中
我想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
E.g.
>>> from numpy import nanmedian, NaN
>>> nanmedian([1,2,3,NaN,NaN,NaN,NaN,NaN,NaN])
2.0
如果你不能使用版本1.9.0的numpy,类似于@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
单目运算符符号。)
我会清理所有NaN的列表,然后得到清理列表的中位数。想到两种方法。如果您使用的numpy的图书馆,你可以这样做:
x = x[numpy.logical_not(numpy.isnan(x))]
其中x
是你想要得到的
中位数或者,如果你只是想使用附带的库,你可以做名单:
import math
x = [value for value in x if not math.isnan(value)]
然后得到平均只使用清洗名单:`中位数(X)``
你提到的名单,但标签这是大熊猫,一系列默认在系列中调用'median'将忽略'NaN'值:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.median.html#pandas.Series.median – EdChum 2014-10-20 21:46:21