在python中删除了NaN值的列表的中位数

wol*_*oor 4 python numpy median pandas

是否有可能在没有明确删除NaN的情况下计算列表的中位数,而是忽略它们?

我想median([1,2,3,NaN,NaN,NaN,NaN,NaN,NaN])成为2,而不是NaN.

War*_*ser 11

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
Run Code Online (Sandbox Code Playgroud)

例如

>>> from numpy import nanmedian, NaN
>>> nanmedian([1,2,3,NaN,NaN,NaN,NaN,NaN,NaN])
2.0
Run Code Online (Sandbox Code Playgroud)

如果你不能使用版本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
Run Code Online (Sandbox Code Playgroud)

要么

>>> np.median(x[np.isfinite(x)])
2.0
Run Code Online (Sandbox Code Playgroud)

(当应用于布尔数组时,~是一元运算符表示法not.)