我从 CSV 导入的 pandas 数据框中有一系列数据,但该文件(每分钟采样一次)缺少一整天的数据。我想用前一天或一周中的某一天(7 天前)的相同数据替换它们,或者也用前一天或一周中的几天(7 x n 天前)的每分钟平均值替换它们。
这应该用 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*
-------------------------------
在输出中,我想获得完整的数据集,用相同的工作日(或前一天)值或平均值替换缺失值。因此,如果我将该值替换为数据集前一天的值,则数据集将如下所示:
...
------------------------
*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
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,3118.00
2018-01-08 00:01:00,3118.00
2018-01-08 00:02: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 分钟的缺失日期,我将开始日期设为
'2018-01-05 00:00:00'
并将结束日期设为>'2018-01-08 00:02:00'
,请根据您的要求修改。 - 由于现在拥有所有时间戳,我们可以将索引重置为日期列。
- 我们现在将日期列与时间戳的时间部分分组并填充它。
关于python - 用前一周(天)或前一天的数据填充 pandas 时间序列中的缺失数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67275219/