在计算数据框中包含缺失值的列的平均值期间
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
举个例子。 假设我们有一个列名为“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