使用 Python Pandas 轉換 Excel 時間格式

在 Excel 看到的時間格式是正常的,用 Pandas 讀取後卻變成一串奇怪的數字?

問題

  • 在 Excel 看到的時間是「2020/9/29 08:30:36 下午」,使用 Python 的 Pandas 讀取進來的資料卻顯示「44103.8545833333」?
    – 這到底是什麼時間格式?
    – 該怎麼轉換呢?

為什麼會有這個狀況?

  • 由於 Excel 有自己計算時間格式的方式,因此使用 Python 的 Pandas pd.read_excel('file.xlsx') 讀取時會將原始的時間格式給讀取進來。
  • 若嘗試著把 Excel 時間資料改為「通用格式」,就會發現真的變成那串奇妙的數字了!

該如何解決?

  • 只要加上一行程式碼就可以轉換完成囉!
    – 記得要另外匯入 datetime
    – df[‘date’] 為原始時間欄位
pd.TimedeltaIndex(df['date'], unit='d') + datetime(1899, 12, 30)

  • 完整程式碼:
from datetime import datetime
import pandas as pd
import openpyxl # 讀取 Excel 檔案的 engine
df = pd.read_excel('YOUR_FILE.xlsx', engine='openpyxl')
df['real_date'] = pd.TimedeltaIndex(df['date'], unit='d') + datetime(1899, 12, 30)

參考來源:Convert Excel style date with pandas

延伸補充

  • 若是有在經營 Facebook 粉絲專頁的話,使用 Pandas 讀取洞察報告的 Excel 時就會遇到這個問題
  • 除了必須使用上述方法解決之外,洞察報告中的發文時間會顯示美國西岸的時間,所以記得要再加上 15 小時,才會是正確的台灣時間唷!
  • 程式碼如下:
from datetime import datetime, timedelta

df['real_date'] = pd.TimedeltaIndex(df['date'], unit='d') + datetime(1899, 12, 30) + timedelta(hours=15)
  • 當然也可以在匯出報告時就選擇 CSV 檔,時間格式就會直接正常顯示啦~

歡迎追蹤我的 Facebook 粉專:https://www.facebook.com/jumpingcoder

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s