在计算包含缺失值的数据框中的列的平均值期间

问题描述

让我们举个例子。 假设我们有一个列名为“f1”的数据框

f1 : {2,4,NaN,1,15}

当我们对其应用均值插补时,我们会编写这样的代码

dataframe['f1'].fillna(dataframe['f1'].mean())

所以我的疑问是当它在 dataframe['f1'].mean() 期间计算 f1 的平均值时,我知道它在求和期间(在分子中)排除了 NaN 值,因为它们可以't be added 但我想知道的是,除以值的总数时,它可以包含或排除在分母中。

mean 是这样计算的

mean(f1) = (2+4+1+15)/6(在值总数中包括 NaN)

或者这样

mean(f1) = (2+4+1+15)/4(不包括值总数中的 NaN)

另外,解释一下为什么? 提前致谢

解决方法

根据 the official documentation of pandas.DataFrame.mean "skipna" 参数排除了 NA/null 值。如果它被排除在分子但分母之外,这将在文档中专门提到。您可以通过使用虚拟数据框(例如您在问题中举例说明的数据框)执行简单实验来证明自己已将其排除在分母之外。

应该从分母中排除 NA/null 值的原因是为了在统计上是正确的。平均值是数字的总和除以它们的总数。如果您无法在总和中添加一个值,那么在分母中对其进行额外计数是没有意义的。如果将其计入分母,则它的行为就好像 NA/null 值为 0。但是,该值不是 0,它是未知的、未观察到的、隐藏的等。

如果您在实践中承认分布的性质,您可以根据分布的性质相应地 interpolatefill NA/null 值,然后取所有值的平均值。例如,如果您意识到所讨论的特征具有线性性质,则可以使用“线性”方法插入缺失值。

,

pd.Series.mean 仅计算非 NaN 值的均值,因此对于上述数据,均值是 (2+4+1+15)/4=5.5,4 是非 NaN 值的数量,这是计算 {{ 的默认行为1}}。如果您想使用所有行作为分母包括给定系列的平均值,您可以在调用 mean 之前fillna(0)

直接调用mean()

mean()

df['f1'].fillna(df['f1'].mean()) 0 2.0 1 4.0 2 5.5 <------ 3 1.0 4 5.5 <------ 5 15.0 Name: f1,dtype: float64 之后调用 mean()

fillna(0)