python - 用前一周(天)或前一天的数据填充 pandas 时间序列中的缺失数据?

标签 python pandas dataframe missing-data

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

关于python - 用前一周(天)或前一天的数据填充 pandas 时间序列中的缺失数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67275219/

相关文章:

python - 将 Julian 日期转换为数据框中的正常日期?

python - 使用不带类型注释的 mypy 检测类型错误

python - 基于一列保存数据并由 Pandas 中的另一列命名

r - 无变量数据时添加NULL

python - 拆分一列字符串并用 Pandas 计算单词数

python - 如何在两列 pandas 的元素之间应用函数

r - 获取数据帧 R 的所有列的平均值

python - 使用 PyAudio 录制扬声器输出

python - 如何在同时具有 64 位和 32 位版本的情况下 pip 安装 64 位包?

python - 如何使用 Google 的视觉 API 通过一次调用注释多个图像? Python