昨天我們已經成功把股票資料轉成 pandas DataFrame,並且能存成 CSV 檔案。今天的重點,是解決「日期格式」的問題。
雖然 twstock 幫我們抓到的日期欄位看起來像 2025-09-01 這樣的文字,但對程式來說,它還只是「字串 (String)」,而不是可以用來做時間運算的「日期物件」。這會造成一個嚴重的問題:排序會錯誤。
只要一行,就能把字串轉換成日期時間物件:
df['Date'] = pd.to_datetime(df['Date'])
很多人第一次跑完會疑惑:CSV 裡的日期文字看起來都一樣啊,為什麼要特別轉型?
關鍵是 —— 改變發生在程式內部,而不是 CSV 外觀。
簡單來說:
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')
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
CSV 看起來沒變:因為寫檔時仍輸出成 YYYY-MM-DD 文字,但順序是根據正確的時間計算出來的。
那今天就先這樣。