Pandas 基礎 – 將數據中日期格式的民國年轉為西元年格式

這是小編最近在搞花卉價格預測時,在資料前處理的地方碰到的狀況,就是在將資料格式轉為日期時候出錯。先看看載入的數據集如下,可以看到日期是以民國年為主。

當小編要將資料格式轉為日期時,下了如下的指令得到了錯誤:

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

結果如下,筆記一下:

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料