用 Pandas 重采樣,一次搞定所有時間級別的 K 線資料

更新 發佈閱讀 9 分鐘

前言

哈囉!!!各位讀者好,不知不覺間已經來到 2026 年,距離上一次更新竟然已經過了 8 個月了呢。當時筆者正被微積分、線性代數、機率與統計輪番折磨,進而導致部落格斷更了一段時間。現在回過頭看,當時困擾筆者許久的問題,其實也沒有想像中那麼困難,只是需要多花一點時間去理解與消化罷了。不知道各位讀者是否也已經順利解決當時所面臨的那些難題了呢?

在 2026 年 1 月 12 日這一天,筆者在此祝福各位讀者——

新年快樂、身體健康、闔家平安、事業順利、心想事成!

文章背景說明

本篇文章將用來接續上一篇:〈三種取得比特幣價格數據的實用方法〉

如果各位讀者曾經使用過該文章中提到的第二種方法,想必會遇到一個問題:

「我想要不同時間級別的 K 線資料,但程式一次只能抓取一種時間級別。」

因此,讀者往往需要手動修改時間級別,反覆執行程式來取得不同週期的 K 線資料。 有些勤奮的讀者,可能真的就這樣一個一個時間級別慢慢抓;而有程式基礎的讀者,則可能會使用 Double For Loop,一次性抓取多個幣種與多個時間範圍的資料。

不過,這些做法多少都會讓程式碼變得冗長,也容易產生大量重複的 CSV 檔案。

本篇要介紹的方法:資料重采樣(Resampling)

在這篇文章中,筆者想要介紹另一種更彈性、也更優雅的方法——

資料重采樣(Resampling Data)

透過 Python 中的 Pandas 套件,我們可以將既有的 K 線資料,轉換成其他時間級別的 K 線資料。

需要特別注意的是:

👉 重采樣只能轉換成「比原始資料更大的時間級別」

舉例來說,若你手上有的是 1 小時 K 線資料,那麼你可以將它轉換成 2 小時、4 小時,甚至是日線,但無法反向轉成 30 分鐘或 15 分鐘的 K 線。

實作步驟說明

步驟 1:讀取 CSV 檔案,並將時間欄位設為索引

目的是讓 Pandas 能夠正確辨識時間序列,這也是進行重采樣所必須的資料格式。

import os
import pandas as pd

# ====== file path(建議使用最小時間級別的數據文件)======
file = r"C:\Users\yuanc\BTCUSDT_5m.csv"
df = pd.read_csv(file)

# ====== 時間列處理:設爲索引 ======
df["OpenTime"] = pd.to_datetime(df["OpenTime"])
df = df.sort_values("OpenTime").set_index("OpenTime")
CSV FILE裡的內容

CSV FILE裡的內容

步驟 2:選擇欲重采樣的時間級別

# ====== 你想要的週期 ======
days_weeks_month = ["1d", "1w", "1M"]
hours = ["1h", "2h", "4h", "6h", "8h", "12h"]
minutes = ["3m", "5m", "10m", "15m", "30m"]

timeframes = minutes + hours + days_weeks_month

# 或將所有時間級別裝在同一個LIST裡
# timeframes = ["3m", "5m", "10m", "15m", "30m", "1h", "2h", "4h", "6h", "8h", "12h"]

注意事項:

筆者使用的原始資料為 比特幣 5 分鐘 K 線資料,因此只能將其重采樣成 5 分鐘的倍數(例如 15m、30m、1h)。

因此,需要從程式碼中移除像是 3m7m 這類無法整除的時間級別。

若讀者有需求產生 7 分鐘 K 線,則必須從 1 分鐘 K 線資料 開始進行重采樣。

步驟 3:定義 OHLCV 聚合規則(核心邏輯)

# ====== 輸出目錄(和源文件同目錄)======
# RESAMPLE後的CSV FILE會跟你原始的CSV FILE在同一處
out_dir = os.path.dirname(file)
symbol = "BTCUSDT"

# ====== resample 規則(OHLCV)======

agg = {
    "Open": "first",
    "High": "max",
    "Low": "min",
    "Close": "last",
    "Volume": "sum",
    "CloseTime": "last",  # 這裡保留 closeTime 的“最後一條”
}

這一步是整個重采樣的核心,用來定義:

當多根小週期 K 線合併成一根大週期 K 線時,各欄位該如何計算。

以「6 根 5 分鐘 K 線合成 1 根 30 分鐘 K 線」為例:

  • Open(開盤價):取該時間區間第一根 K 線 → first
  • High(最高價):取區間內最高的 High → max
  • Low(最低價):取區間內最低的 Low → min
  • Close(收盤價):取區間內最後一根的 Close → last
  • Volume(成交量):區間內所有成交量加總 → sum
  • CloseTime:取最後一根 K 線的 CloseTime → last

以上即為標準的 K 線合成邏輯。

步驟 4:使用 for 迴圈,對所有選定的時間級別進行重采樣

此步驟可讓程式自動產生多個不同週期的 K 線資料。

for tf in timeframes:

    # pandas resample 频率:m->min, h->H, d->D, w->W, M->ME

    rule = tf
    if tf.endswith("m"):
        rule = tf[:-1] + "min"   # 3min -> 3minute
    elif tf.endswith("h"):
        rule = tf[:-1] + "h"   # 2h -> 2hour
    elif tf.endswith("d"):
        rule = tf[:-1] + "D"   # 1d -> 1Day
    elif tf.endswith("w"):
        rule = tf[:-1] + "W"   # 1w -> 1Week
    elif tf.endswith("M"):
        rule = tf[:-1] + "ME"   # 1ME/1M -> 1Month(月)

# 把 5 分鐘數據聚合成更大週期
    out = df.resample(rule, label="left", closed="left").agg(agg).dropna()

步驟 5:將各週期的 K 線資料存成 CSV 檔案

依需求選擇是否儲存,或直接用於後續分析與回測。

    # 保存每個週期的 CSV
    out = out.reset_index()
    out_file = os.path.join(out_dir, f"{symbol}_{tf}.csv")
    out.to_csv(out_file, index=False)

    print(f"Saved: {out_file}  rows={len(out)}")

總結

透過資料重采樣的方法,讀者可以:

  • 一次性產生任意所需的時間級別 K 線
  • 不再需要儲存大量不同時間週期的 CSV 檔案
  • 只需保留「最小時間級別」的原始資料即可

這在進行策略回測、多週期分析時,會特別方便。

感謝各位讀者花時間閱讀本篇文章,希望對你有所幫助。

如果你喜歡這篇文章,歡迎給我一個大大的愛心 ❤️,並追蹤筆者。 我們下篇文章見,掰掰!













留言
avatar-img
Liang Yuan | 程式交易
2會員
7內容數
分享本人做过的数据回测,策略思路,踩过的坑等等。主要与虚拟货币相关。
2025/04/01
本文介紹三種取得比特幣價格數據的方法,分別為從Investing.com和Binance網站下載,以及透過Python程式碼向交易所發送HTTP請求。每種方法都有其優缺點,讀者可依據自身需求選擇最合適的方式。
Thumbnail
2025/04/01
本文介紹三種取得比特幣價格數據的方法,分別為從Investing.com和Binance網站下載,以及透過Python程式碼向交易所發送HTTP請求。每種方法都有其優缺點,讀者可依據自身需求選擇最合適的方式。
Thumbnail
2025/03/28
本文探討成交量加權平均價格 (VWAP) 的使用方法,並分享使用 VWAP 作為交易策略的回測結果,包含三種不同方法:價格與 VWAP 比較、價格與 VWAP 比率,以及 VWAP 線的交叉。
Thumbnail
2025/03/28
本文探討成交量加權平均價格 (VWAP) 的使用方法,並分享使用 VWAP 作為交易策略的回測結果,包含三種不同方法:價格與 VWAP 比較、價格與 VWAP 比率,以及 VWAP 線的交叉。
Thumbnail
2025/01/12
佈林帶通道(BOLLINGER BAND)是一種廣泛使用的技術分析指標,本文將詳細剖析其原理、使用方法及優缺點,並結合比特幣期貨回測結果,提供最佳參數設定及交易策略建議。
Thumbnail
2025/01/12
佈林帶通道(BOLLINGER BAND)是一種廣泛使用的技術分析指標,本文將詳細剖析其原理、使用方法及優缺點,並結合比特幣期貨回測結果,提供最佳參數設定及交易策略建議。
Thumbnail
看更多
你可能也想看
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
在 vocus 與你一起探索內容、發掘靈感的路上,我們又將啟動新的冒險——vocus App 正式推出! 現在起,你可以在 iOS App Store 下載全新上架的 vocus App。 無論是在通勤路上、日常空檔,或一天結束後的放鬆時刻,都能自在沈浸在內容宇宙中。
Thumbnail
快消食品 (FMCG) 市場競爭越來越激烈,單靠廣告/一次性投放,已難帶來穩定成長。 當代消費者 趨向理性、重視價值與信任 — 僅靠「促銷/曝光」已不足。 成功品牌將 三個關鍵策略結合:AI/數據驅動 + 真實信任 (品牌/品質/口碑) + 長期內容/
Thumbnail
快消食品 (FMCG) 市場競爭越來越激烈,單靠廣告/一次性投放,已難帶來穩定成長。 當代消費者 趨向理性、重視價值與信任 — 僅靠「促銷/曝光」已不足。 成功品牌將 三個關鍵策略結合:AI/數據驅動 + 真實信任 (品牌/品質/口碑) + 長期內容/
Thumbnail
深入解析「信度」與「效度」這兩個在研究方法、心理測驗和數據分析中最常被問到的核心概念。透過射箭靶的比喻、生活實例和比較表,幫助讀者輕鬆理解信度代表結果的一致性(穩定性),而效度代表結果的準確性(真實性)。文章強調信度是效度的基礎,但有信度不一定有效度。
Thumbnail
深入解析「信度」與「效度」這兩個在研究方法、心理測驗和數據分析中最常被問到的核心概念。透過射箭靶的比喻、生活實例和比較表,幫助讀者輕鬆理解信度代表結果的一致性(穩定性),而效度代表結果的準確性(真實性)。文章強調信度是效度的基礎,但有信度不一定有效度。
Thumbnail
🧑‍💻訂閱每週【🔗投資週報】:即時行情分析不漏接 聯準會主席鮑爾在央行年會上出現了兩方面態度轉變,一是承認就業嚴重下滑,二是認可關稅通膨很可能是一次性的,為今年的降息週期大開綠燈。美元暴跌,非美貨幣、大宗商品、以及全球股市齊齊上漲。  ⭐【新戶註冊】立享$5000贈金💰 ⭐【存入200
Thumbnail
🧑‍💻訂閱每週【🔗投資週報】:即時行情分析不漏接 聯準會主席鮑爾在央行年會上出現了兩方面態度轉變,一是承認就業嚴重下滑,二是認可關稅通膨很可能是一次性的,為今年的降息週期大開綠燈。美元暴跌,非美貨幣、大宗商品、以及全球股市齊齊上漲。  ⭐【新戶註冊】立享$5000贈金💰 ⭐【存入200
Thumbnail
分享接受一次性軟骨修復手術(自體軟骨修復術)的經驗,包括術前諮詢、手術過程、費用明細、術後復健及注意事項等,希望能幫助有相同困擾的患者。
Thumbnail
分享接受一次性軟骨修復手術(自體軟骨修復術)的經驗,包括術前諮詢、手術過程、費用明細、術後復健及注意事項等,希望能幫助有相同困擾的患者。
Thumbnail
Zoe的同事 Kevin 拖延成性,總是等到最後一刻才動,導致她的工作頻頻卡關。Alan 教她用 「假期限策略」、「拆解工作」與「建立拖延成本」 三大技巧,成功讓 Kevin 提前開始、逐步完成任務,甚至被迫對拖延行為負責!最終,Zoe 擺脫了無止境的追趕遊戲,學會了讓拖延者自動進入工作模式的秘訣!
Thumbnail
Zoe的同事 Kevin 拖延成性,總是等到最後一刻才動,導致她的工作頻頻卡關。Alan 教她用 「假期限策略」、「拆解工作」與「建立拖延成本」 三大技巧,成功讓 Kevin 提前開始、逐步完成任務,甚至被迫對拖延行為負責!最終,Zoe 擺脫了無止境的追趕遊戲,學會了讓拖延者自動進入工作模式的秘訣!
Thumbnail
本篇文章探討財務報告與其他數據報告的不同之處,強調財務數據不可變動的特性。 介紹了三種常見的數據報告類型,並分享在計算財務報告時可能遇到的四大陷阱與解決方案。此外,還提供如何發現財務數據異常的實務經驗,並建議透過 snapshot 機制來追蹤歷史數據,確保財務報告的準確性與可靠性。
Thumbnail
本篇文章探討財務報告與其他數據報告的不同之處,強調財務數據不可變動的特性。 介紹了三種常見的數據報告類型,並分享在計算財務報告時可能遇到的四大陷阱與解決方案。此外,還提供如何發現財務數據異常的實務經驗,並建議透過 snapshot 機制來追蹤歷史數據,確保財務報告的準確性與可靠性。
Thumbnail
敏盛醫院於19日舉辦敏盛醫療體系創立49週年院慶活動,骨科部林殿閔醫師分享了一次性自體軟骨修復術的案例。在各項運動領域,膝蓋軟骨損傷往往被視為運動員職業生涯的終結者。然而,隨著醫學技術的進步,特別是在自體軟骨修復醫學領域,這樣告別運動生涯的遺憾正在成為過去式。一名剛升上國中羽球校隊的馮小選手就是這項
Thumbnail
敏盛醫院於19日舉辦敏盛醫療體系創立49週年院慶活動,骨科部林殿閔醫師分享了一次性自體軟骨修復術的案例。在各項運動領域,膝蓋軟骨損傷往往被視為運動員職業生涯的終結者。然而,隨著醫學技術的進步,特別是在自體軟骨修復醫學領域,這樣告別運動生涯的遺憾正在成為過去式。一名剛升上國中羽球校隊的馮小選手就是這項
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News