在python中,删除了NaN值的列表的中值

2024-04-25 09:59:55 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有可能在不显式删除NaN的情况下计算列表的中值,而忽略它们?

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


Tags: 列表情况nanmedian
2条回答

我会清理所有NaN's的列表,然后得到已清理列表的中值。我想到了两种方法。如果您使用的是numpy库,可以执行以下操作:

x = x[numpy.logical_not(numpy.isnan(x))] 其中x是要获取

或者,如果只想使用包含的库,可以执行以下操作:

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

然后,要得到中间值,只需使用清理过的列表:`中间值(x)``

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

如果你不能使用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的一元运算符表示法。)

相关问题 更多 >