【问题标题】:How to fill missing observations in time series data如何填补时间序列数据中缺失的观测值
【发布时间】:2021-03-26 10:22:53
【问题描述】:

我有一个假设的时间序列数据框,其中缺少一些观察结果(假设数据框应包括所有日期和相应的值以及一年中的所有日期)。正如我们在头部和尾部信息中看到的那样,缺少某些日期和相应的值(1 月 30 日和 12 月 29 日)。数据框中会出现更多这样的情况,有时会丢失多个连续日期的观察结果。

有没有一种方法可以检测到缺失的日期并将其插入数据框中,并用一周窗口的滚动平均值填充相应的值(这自然会增加数据框的行数)?感谢您的投入。

df.head(3)

    date        value
0   2020-01-28  25
1   2020-01-29  32
2   2020-01-31  45

df.tail(3)

    date        value
3   2020-12-28  24
4   2020-12-30  35
5   2020-12-31  37

df.dtypes
date     object
value     int64
dtype: object

【问题讨论】:

    标签: python pandas time-series


    【解决方案1】:

    创建DaetimeIndex,然后使用DataFrame.asfreq 滚动和mean

    df['date'] = pd.to_datetime(df['date'])
    
    df = df.set_index('date').asfreq('d').rolling('7D').mean()
    

    如果需要按年份使用的所有值:

    df['date'] = pd.to_datetime(df['date'])
    
    idx = pd.date_range('2020-01-01','2020-12-31')
    df = df.set_index('date').reindex(idx).rolling('7D').mean()
    

    【讨论】:

    • 非常感谢@jezrael。这就是我要的。而是一个查询。为什么生成的数据框有 339 行;不应该是366行吗?有什么原因吗?
    • @Srinivas - 嗯,问题不是由2020-01-01开始第一次约会
    • 我很抱歉 :)。感到惭愧。谢谢你。 :):)
    • @Srinivas - 没问题,还添加了全年数据的解决方案
    • 太好了...非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2018-04-24
    • 2015-12-03
    • 2019-06-09
    • 2021-10-05
    相关资源
    最近更新 更多