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

时间:2014-10-20 21:38:18

标签: python numpy pandas median

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

我希望median([1,2,3,NaN,NaN,NaN,NaN,NaN,NaN])为2,而不是NaN。

2 个答案:

答案 0 :(得分: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

E.g。

>>> from numpy import nanmedian, NaN
>>> nanmedian([1,2,3,NaN,NaN,NaN,NaN,NaN,NaN])
2.0

如果你不能使用版本1.9.0的numpy,那么@ Parker的回答就会起作用; e.g。

>>> 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的一元运算符表示法。)

答案 1 :(得分:2)

我会清除所有NaN的列表,然后获取清理列表的中位数。我想到了两种方式。如果你正在使用numpy库,你可以这样做:

x = x[numpy.logical_not(numpy.isnan(x))] 其中x是您希望获得

中位数的列表

或者,如果您只想使用附带的库,您可以这样做:

import math
x = [value for value in x if not math.isnan(value)]

然后获得中位数只需使用清理列表:`median(x)``