微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用前一周天或前一天的数据填充熊猫时间序列中的缺失数据?

如何解决用前一周天或前一天的数据填充熊猫时间序列中的缺失数据?

我在从 CSV 导入的 Pandas 数据框中有一系列数据,但该文件(每分钟采样)一整天都缺少数据。我想用前一天或前一周(7 天前)的相同数据替换它们,或者,也用前一天或前一周(7 xn 天前)的每分钟平均值替换它们。

这应该用 pandas 或 python 来完成,但坦率地说我不知道​​该怎么做,也许尝试重新采样或 groupby,然后以微小的频率再次重新采样?不过,我不希望更改所有数据..

文件看起来像这样:

...
------------------------
*prevIoUs complete data*
------------------------
2018-01-05 00:00:00,2900.41
2018-01-05 00:01:00,2919.24
2018-01-05 00:02:00,2938.07
..
2018-01-05 23:59:00,2994.57
-------------------
*missing days data*
-------------------
2018-01-08 00:00:00,3118.00
2018-01-08 00:01:00,3118.00
2018-01-08 00:02:00,3125.54
...
-------------------------------
*complete data till end of year*
-------------------------------

输出中,我想获得完整的完整数据集,用相同的 WEEKDAY(或 DAY BEFORE)值或平均值替换缺失值。因此,如果我将值替换为数据集前一天的值,将如下所示:

...
------------------------
*prevIoUs complete data*
------------------------
2018-01-05 00:00:00,2938.07
...
2018-01-05 23:59:00,2994.57
2018-01-**06** 00:00:00,2900.41
2018-01-**06** 00:01:00,2919.24
2018-01-**06** 00:02:00,2938.07
...
2018-01-**06** 23:59:00,2994.57

......

2018-01-08 00:00:00,3125.54
...
-------------------------------
*complete data till end of year*
-------------------------------

感谢能提供帮助的人。

解决方法

下面是用前一天的值填充缺失的日期时间的代码。

考虑样本输入

    date        val
0   2018-01-05 00:00:00 2900.41
1   2018-01-05 00:01:00 2919.24
2   2018-01-05 00:02:00 2938.07
3   2018-01-08 00:00:00 3118.00
4   2018-01-08 00:01:00 3118.00
5   2018-01-08 00:02:00 3125.54

现在我们正在尝试为 2018.01.06 和 2018.01.07 填充相同时间戳的这些值。

df['date'] = pd.to_datetime(df.date)
df = df.set_index('date')
df = df.reindex(pd.date_range('2018-01-05 00:00:00','2018-01-08 00:02:00',freq='1 min')
          ).reset_index().rename(columns={'index':'date'})
df = df.groupby(df.date.dt.time).ffill()

输入时间的切片输出

        date                val
0       2018-01-05 00:00:00 2900.41
1       2018-01-05 00:01:00 2919.24
2       2018-01-05 00:02:00 2938.07
1440    2018-01-06 00:00:00 2900.41
1441    2018-01-06 00:01:00 2919.24
1442    2018-01-06 00:02:00 2938.07
2880    2018-01-07 00:00:00 2900.41
2881    2018-01-07 00:01:00 2919.24
2882    2018-01-07 00:02:00 2938.07

说明

  1. 我们首先将“日期”列转换为时间戳。
  2. 将日期列设置为索引。
  3. 我们正在重新索引索引以填充缺失的日期,频率为 1 分钟,我将开始日期设为 '2018-01-05 00:00:00',结束日期设为 '2018-01-08 00:02:00',请根据您的要求进行修改。立>
  4. 由于现在拥有所有时间戳,我们可以将索引重置为日期列。
  5. 我们现在将日期列与时间戳的时间部分分组并填充它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。