這是小編最近在搞花卉價格預測時,在資料前處理的地方碰到的狀況,就是在將資料格式轉為日期時候出錯。先看看載入的數據集如下,可以看到日期是以民國年為主。
當小編要將資料格式轉為日期時,下了如下的指令得到了錯誤:
d = cluster_data['date'] d = pd.to_datetime(d,format='%Y/%m/%d') out ValueError: time data '108/01/01' does not match format '%y/%m/%d' (match)
查了一下網路原來 to_datetime 的格式只支援西元年(%Y 是四位數 %y是兩位數),研究了一下用 iloc 在帶個 For 迴圈來做。
for i in range(len(df)): d.iloc[i]=d.iloc[i].replace(d.iloc[i][0:3], str(int(d.iloc[i][0:3]) + 1911))
程式說明一下:
1. 將 d 的每一行取出 d.iloc[i]
2. 再取出前三個字元(即民國年) 如: 108
3. 用 int 變成數字,再加 1911 就變成 西元了
4. 用str 變為字串,再replace 回去本來的 d.iloc[i]
# 將date轉換成日期類型 d = cluster_data['date'] for i in range(len(d)): d.iloc[i]=d.iloc[i].replace(d.iloc[i][0:3], str(int(d.iloc[i][0:3]) + 1911)) d.head() print('-'*20) d=pd.to_datetime(d,format='%Y/%m/%d') # 並將「日期」列設置為索引。 cluster_data['date'] = pd.to_datetime(cluster_data['date']) cluster_data = cluster_data.set_index(['date'], drop=True) cluster_data
結果如下,筆記一下: