教學 筆記 機器學習 程式設計 服務架設
Pandas 填充時間序列缺失值的方法
更新於5個月前
目錄
沒有目錄
pandas_logo
在做時間序列的機器學習時,時常會遇到資料缺失部分時間序列的狀況,像是如果從銷售資料中 groupby,未必每天都有銷售發生,這是就會產生某幾天的時間序列遺漏的問題,以下提供方法解決: 假設資料長成以下這樣 (data.csv)
dsy
2022-12-305
2023-01-034
2023-01-0411
2023-01-056
2023-01-077
讀取 csv 檔案
import pandas as pd

data = pd.read_csv('data.csv')
data['ds'] = pd.to_datetime(data['ds']) # 可以加這行將時間索引欄位設為datetime,不然會出錯(後面reindex時fill_value會將全部值覆蓋掉)
產生時間序列索引
date_range = pd.date_range(start='<開始時間>', end='<結束時間>', freq='<單位>')
這裡我們就以 DS 的最小日期作為開始時間、最大日期作為結束時間,而單位則是 D (日)。
date_range = pd.date_range(start=data['ds'].min(), end=data['ds'].max(), freq='D')
print(data_range)
這裡你就會得到一個從 2022-12-30 到 2023-01-07 的時間序列索引
DatetimeIndex(['2022-12-30', '2022-12-31', '2023-01-01', '2023-01-02',
               '2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06',
               '2023-01-07'],
              dtype='datetime64[ns]', freq='D')
將時間索引回填進 data,並補 y 值
由於這邊我假設 y 是銷售資料,因此就直接補 0
data = data.set_index('ds') # 將ds設為index
data = data.reindex(date_range, fill_value=0) # 將date_range設為data的index,並將空值用0填滿
data = data.reset_index() # 重設index(即把ds設回一般欄位)
data.columns = ['ds', 'y'] # 重命名欄位
重命名欄位的部分,由於 reset_index 會將 index 欄位的名稱設為 `index`,所以可以重新命名把欄位名設回你所需要使用的欄位,像是 ds、y 是 Prophet 所指定的欄位名稱。 另外,如果你不想把空值設為 0,而是想另外用其他方式來補空值,則不要設定 fill_value 參數即可,pandas 會保留那些缺失值的欄位為 NaN,則可以利用其他方式進行資料遺漏值處理。
秉持著我都會遇事別人怎麼不會的精神分享解決事情的經過。
sakkyoi © 2024
Roses are Red, Violets are Blue Unexpected '{' on line 32.
本站使用 Tocas-UI 進行設計
問題回報
如果您在本站的使用過程中遇到任何困難或是錯誤,歡迎透過 email 向我們回報。如果是關於文章內容的相關討論,敬請使用留言板直接進行討論,這將幫助其他使用者了解您遇到的問題。
使用者分析
我們使用自己的分析伺服器收集並分析您在本站的行為,這樣能確保您的相關資料不受其他第三方伺服器濫用。您可以選擇將本功能關閉以保護您的隱私。但這會阻止我們透過您的行為來改善您和其他使用者的體驗。