【问题标题】:During the calculation of mean of a column in dataframe that contain missing values在计算数据框中包含缺失值的列的平均值期间
【发布时间】:2021-10-01 01:31:33
【问题描述】:

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

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

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

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

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

mean 是这样计算的

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

或者这样

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

还有,解释一下为什么? 提前致谢

【问题讨论】:

    标签: python pandas statistics data-science missing-data


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

        猜你喜欢
        • 2021-04-24
        • 1970-01-01
        • 2020-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-03
        相关资源
        最近更新 更多