iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
AI & Data

從網路爬蟲到資料洞察的應用系列 第 7

處理日期格式(字串轉 datetime)

  • 分享至 

  • xImage
  •  

昨天我們已經成功把股票資料轉成 pandas DataFrame,並且能存成 CSV 檔案。今天的重點,是解決「日期格式」的問題。

雖然 twstock 幫我們抓到的日期欄位看起來像 2025-09-01 這樣的文字,但對程式來說,它還只是「字串 (String)」,而不是可以用來做時間運算的「日期物件」。這會造成一個嚴重的問題:排序會錯誤。

日期轉換的核心程式碼

只要一行,就能把字串轉換成日期時間物件:

df['Date'] = pd.to_datetime(df['Date'])

為什麼要轉換日期?

很多人第一次跑完會疑惑:CSV 裡的日期文字看起來都一樣啊,為什麼要特別轉型?
關鍵是 —— 改變發生在程式內部,而不是 CSV 外觀。
簡單來說:

  • twstock 抓回來的日期其實是「文字」。
  • pd.to_datetime() 告訴程式:這些不是字串,而是真正的日期。
  • 轉換後,df.sort_values(by='Date', ascending=False) 就能正確把最新日期排在最前面。
  • 存檔時,df.to_csv() 會把日期物件轉回標準 YYYY-MM-DD 文字格式,所以看起來沒變,但排序正確了。

範例程式碼

import twstock
import pandas as pd

stock = twstock.Stock('2330')

df = pd.DataFrame({
    'Date': stock.date,
    'Close': stock.close,
    'Volume': stock.capacity
})

#把 Date 欄位轉換成 datetime
df['Date'] = pd.to_datetime(df['Date'])

#按日期排序(最新 → 最舊)
df = df.sort_values(by='Date', ascending=False)

df.to_csv('2330_stock.csv', index=False)

print(df.dtypes)
print(df.head())

常見用法與技巧

  • 直接在讀檔時解析日期
df = pd.read_csv('2330_stock.csv', parse_dates=['Date'])
  • 指定格式(效率更快、避免誤判)
pd.to_datetime(df['Date'], format='%Y-%m-%d')
  • 遇到錯誤格式時轉成 NaT
pd.to_datetime(df['Date'], errors='coerce')
  • 設為時間索引(方便做時間序列分析)
df = df.set_index('Date').sort_index()

延伸操作(把日期「拆解」出來)

一旦轉換成 datetime,就能輕鬆拆解出各種時間資訊:

df['Year'] = df['Date'].dt.year
df['Month'] = df['Date'].dt.month
df['Weekday'] = df['Date'].dt.day_name()

結果:

Date	Close	Volume	Year	Month	Weekday
2025-09-18	590	...	2025	9	Thursday

總結

  • 轉換前:日期只是字串,排序錯誤。
  • 轉換後:日期是 datetime,可以正確排序、索引、做時間序列運算。

CSV 看起來沒變:因為寫檔時仍輸出成 YYYY-MM-DD 文字,但順序是根據正確的時間計算出來的。
那今天就先這樣。
/images/emoticon/emoticon29.gif


上一篇
存成 CSV 檔,確認能保存本地資料
下一篇
處理數字欄位
系列文
從網路爬蟲到資料洞察的應用8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言