是否可以在不顯式刪除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