在Python中获取包含NaN的列表的平均值

8
我想知道如何获取包含NaN值的列表的平均值。可以使用以下方法:
np.mean(mylist)

预期结果返回的是NaN值,这显然是错误的。 我该怎么做才能得到平均值呢?


3
不,这是完全正确的。10、99、1.56、Fish和20的平均值是多少?这是一个无意义的问题,没有答案可言。 - Chris Pfohl
@ Gelazari Christopher是正确的。问题不在于您不知道某种方法,而在于您声称NaN结果是错误的。标准算术运算中一个操作数为NaN时,结果始终为NaN。因此,如果存在NaN,则均值(即将所有内容相加并除以事物数量)的结果为NaN。 - zegkljan
我不使用numpy,那完全不是针对个人的。如果有这种误解,我很抱歉。我只是在解释为什么“mean”会给你输出结果。有时候互联网是一个恶意的地方,但你可以把我从试图变成那样的人的名单中删除。 - Chris Pfohl
@ChristopherPfohl,我认为这里的误解在于NumPy没有明确区分“无法确定”和“无法获得”的概念。缺失数据也用NaN值表示,这可能看起来不直观甚至是不自然的。因此,这个问题是有意义的 :) - cel
好的,这样讲有点更合理了。但你仍然可以使用同样的例子:如果你让6个人在纸片上写下一个数字,然后丢失其中一张纸片,再问某个人这些数字的平均值,答案仍然是“不可用”。 - Chris Pfohl
2个回答

28

使用np.nanmean函数来忽略NaN值:

np.nanmean(mylist)

例如,
In [108]: np.nanmean([np.nan, 1, 2, np.nan, 3])
Out[108]: 2.0

2
谢谢。我会尽快接受您的答案。 :) - azal

0
这种方法只需要“数学”。
temp = 0.0
for i in range(len(your_array)):
    if not math.isnan(your_array[i]):
        temp += your_array[i]
temp /= len(your_array)
print(temp)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接