簡體   English   中英

用前一周(天)或前一天的數據填充 pandas 時間序列中的缺失數據?

[英]fill missing data in pandas time series with data from the previous week(day) or day?

我在 pandas dataframe 中有一系列數據,這些數據是我從 CSV 導入的,但是這個文件(每分鍾采樣)一整天都缺少數據。 我想用前一天或一周的前一天(前 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*
-------------------------------

在 output 中,我想獲得完整的數據集,用相同的 WEEKDAY(或 DAY BEFORE)值或平均值替換缺失值。 因此,如果我將值替換為數據集前一天的值,則如下所示:

...
------------------------
*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()

切片 Output 用於輸入時間

        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. 我們現在將日期列與時間戳的時間部分分組並填充它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM