You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何重采样Yahoo Finance日线OHLC数据需用shift(-1)匹配周线?

技术解析:为何重采样周线需要shift(-1)

核心原因:周区间定义与标签锚点的差异

你遇到的问题本质是Pandas重采样的周区间规则和Yahoo Finance周线的规则存在偏移,具体拆解如下:

  1. Pandas W-Sat的周规则
    当使用resample('W-Sat')时,Pandas将每周六作为周区间的结束标签,周的覆盖范围是上周日至本周六。但美股仅在周一至周五交易,所以每个区间的有效数据是该周周一到周五的行情。
    例如:

    • 标签2024-04-06(周六)对应的数据是2024-04-01至2024-04-05(周一至周五)的交易数据;
    • 标签2024-04-13(周六)对应的数据是2024-04-08至2024-04-12的交易数据。
  2. Yahoo Finance周线的规则
    Yahoo的周线数据直接采用周一至周五作为交易周区间,并将**当周最后一个交易日(周五)**作为数据的索引标签。
    例如:

    • 标签2024-04-05(周五)对应的数据就是2024-04-01至2024-04-05的行情;
    • 标签2024-04-12(周五)对应的数据是2024-04-08至2024-04-12的行情。
  3. shift(-1)的作用:对齐数据匹配Yahoo的返回结果
    对比两者可以发现:Pandas中标签为周六的行,其数据正好等于Yahoo中标签为前一天周五的行。但由于你的时间范围是2024-04-01至2024-05-03,Pandas重采样后会多生成一组对应2024-04-29至2024-05-03数据的区间(标签2024-05-04)。

    执行shift(-1)会将所有数据行向上移动一行:

    • 原标签2024-04-13的数据(对应Yahoo的2024-04-12周)移到2024-04-06的位置;
    • 原标签2024-04-20的数据移到2024-04-13的位置;
    • 最后一行(标签2024-05-04)的数据移到2024-04-27的位置,最后一行变为NaN。

    再执行dropna()删除空行后,剩下的数据就和Yahoo返回的周线数据完全匹配。

更优替代方案

其实无需使用shift(-1),直接将重采样频率改为W-Fri,让Pandas以周五作为周标签,就能和Yahoo的周线规则完全对齐:

weekly_data = daily_data.resample('W-Fri').agg({
    'Open': 'first',
    'High': 'max',
    'Low': 'min',
    'Close': 'last',
    'Volume': 'sum'
}).dropna()

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:44:58