【问题标题】:How to fill nan values with rolling mean in pandas如何在熊猫中用滚动平均值填充nan值
【发布时间】:2018-08-16 19:04:29
【问题描述】:

我有一个在几个地方包含 nan 值的数据框。我正在尝试执行数据清理,其中我用前五个实例的平均值填充 nan 值。为此,我提出了以下建议。

input_data_frame[var_list].fillna(input_data_frame[var_list].rolling(5).mean(), inplace=True)

但是,这不起作用。它没有填充 nan 值。上述操作前后数据帧的空计数没有变化。假设我有一个只有整数列的数据框,如何用前五个实例的平均值填充 NaN 值?提前致谢。

【问题讨论】:

  • 我确实在 fillna 调用中放置了 inplace=True
  • 嗯,您是否可能在df 的副本上设置值? - 什么是var_listpandas.pydata.org/pandas-docs/stable/…
  • var_list 是一个包含列名的列表。
  • 你试过在没有var_list 选择器的情况下运行操作吗?
  • 是的,我确实在没有 var_list 的情况下尝试过。

标签: python pandas dataframe nan mean


【解决方案1】:

你可以简单地使用 interpolate()

df = {'a': [1,5, np.nan, np.nan, np.nan, 2, 5, np.nan] }
df = pd.DataFrame(data=df)
print(df)


df['a'].interpolate()

【讨论】:

    【解决方案2】:

    rolling_mean 函数已在 pandas 中进行了修改。如果填满整个数据集,就可以使用;

    filled_dataset = dataset.fillna(dataset.rolling(6,min_periods=1).mean())
    

    【讨论】:

    • 但是如果我想继续用之前的滚动平均值填充 NaN 值怎么办?只有当数据行之间只有一个 NaN 时,才会正确填充 NaN 值。
    【解决方案3】:

    这应该可行:

    input_data_frame[var_list]= input_data_frame[var_list].fillna(pd.rolling_mean(input_data_frame[var_list], 6, min_periods=1))
    

    请注意,window6,因为它包括 NaN 本身的值(不计入平均值)。此外,其他NaN 值不用于平均值,因此如果在窗口中找到的值少于 5 个,则根据实际值计算平均值。

    例子:

    df = {'a': [1, 1,2,3,4,5, np.nan, 1, 1, 2, 3, 4, 5, np.nan] }
    df = pd.DataFrame(data=df)
    print df
    
          a
    0   1.0
    1   1.0
    2   2.0
    3   3.0
    4   4.0
    5   5.0
    6   NaN
    7   1.0
    8   1.0
    9   2.0
    10  3.0
    11  4.0
    12  5.0
    13  NaN
    

    输出:

          a
    0   1.0
    1   1.0
    2   2.0
    3   3.0
    4   4.0
    5   5.0
    6   3.0
    7   1.0
    8   1.0
    9   2.0
    10  3.0
    11  4.0
    12  5.0
    13  3.0
    

    【讨论】:

    • 非常感谢。我犯的错误是我没有在 rolling().mean() 中放入 min_periods=1 参数。另外,谢谢你让我知道窗口大小应该是 6。
    • 知道如何按行实现这一目标吗?我的意思是用 df.iat[i,j-2], df.iat[i,j-1], df.iat[i,j+1] 的平均值替换空值(比如 df.iat[i,j]) ], df.iat[i,j+2]
    • 但是如果我想继续用之前的滚动平均值填充 NaN 值怎么办?只有当数据行之间只有一个 NaN 时,才会正确填充 NaN 值。
    • 不完全清楚这个问题,所以如果你发布一个新问题可能会更好但也许你需要用 nan 创建一个索引列表并将它用于函数中滚动窗口的变量
    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 2019-08-14
    • 2021-11-28
    • 2020-04-14
    • 2022-07-06
    • 1970-01-01
    相关资源
    最近更新 更多