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

During the calculation of mean of a column in dataframe that contain missing values

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

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

当我们对其应用均值插补时,我们会编写如下代码

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

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

均值是这样计算的

mean(f1) = (2+4+1+15)/6(include NaN in total number of values)

或者这样

mean(f1) = (2+4+1+15)/4(exclude NaN in total number of values)

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

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

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

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

pd.Series.mean 只计算非 NaN 值的平均值,所以对于上面的数据,平均值是 (2+4+1+15)/4=5.5,4 是非 NaN 值的数量,这是计算的默认行为mean。如果要使用分母的所有行来包含给定系列的平均值,可以在调用 mean():

之前 fillna(0)

直接调用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

fillna(0) 之后调用 mean():

df['f1'].fillna(df['f1'].fillna(0).mean())
0     2.000000
1     4.000000
2     3.666667   <------
3     1.000000
4     3.666667   <------
5    15.000000
Name: f1, dtype: float64