我试图计算熊猫数据的平均值(所有这些值都是数字的,而不是“如何计算熊猫DataFrame的平均值和NaN值”的问题),其中包含大量的np.nan。
我附带了这段代码,顺便说一句,它运行得很好:
my_df = pd.DataFrame ([[0,10,np.nan,220],\
[1,np.nan,21,221],[2,12,22,np.nan],[np.nan,13,np.nan,np.nan]])
print(my_df.values.flatten()[~np.isnan(my_df.values.flatten())].mean())
但是,我发现这一行代码提供了相同的结果,但我不明白为什么:
print(my_df.values[~np.isnan(my_df.values)].mean())
这真的一样吗,我能安全地使用吗?我的意思是,my_df.values[~np.isnan(my_df.values)
仍然是一个不平坦的数组,那么它中的np.nan
发生了什么呢?
任何改进都是受欢迎的,如果你看到一种更有效率和节能型的方法来做到这一点。非常感谢。
发布于 2019-07-28 01:19:32
这真的一样吗,我能安全地使用吗?
是的,因为这里的numpy掩盖了NaNs,然后它将计算该数组上的平均值。但你把这里弄得太复杂了。
您可以在这里使用numpy的 [numpy-doc]:
>>> np.nanmean(my_df)
52.2
因此,NaN值没有被考虑在内(无论是在和还是在平均值的计数中)。我认为这可能比用掩蔽计算平均值更具有说明性,因为上面的内容说明了您正在做的事情,而没有说明您是如何做到的。
如果您想计算NaNs,我们可以用0
(类似于@abdullah.cu says )替换它们,例如:
>>> my_df.fillna(0).values.mean()
32.625
https://stackoverflow.com/questions/57239459
复制相似问题