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

如何将1分钟K线数据重采样为15分钟?代码无效果问题排查

问题排查与解决

最可能的原因:未保存重采样结果

resample方法返回的是新的DataFrame对象,如果没有将结果赋值给变量,后续绘图依然使用原1分钟数据的df,自然图表和原数据一致。

比如你可能写了:

df.resample("15T").agg(...)
# 直接用原df绘图
plt.plot(df["CLOSE"])

正确的做法是把重采样结果存到新变量:

df_15min = df.resample("15T").agg({
    "OPEN": "first",
    "HIGH": "max",
    "LOW": "min",
    "CLOSE": "last",
    "VOLUME": "sum"
})
# 用新变量绘图
plt.plot(df_15min["CLOSE"])

其他排查方向

  1. 验证DatetimeIndex有效性
    检查你的索引是否真的是Datetime类型,而非字符串:

    print(df.index.dtype)
    # 输出应为datetime64[ns]或带时区的datetime64[ns, UTC]等
    

    如果是object类型,说明合并DATE和TIME时没正确转换,重新执行:

    df.index = pd.to_datetime(df.index)
    # 或者当初合并时的代码要确保转换(根据你的数据格式调整format):
    df["Datetime"] = pd.to_datetime(df["DATE"] + " " + df["TIME"], format="%Y%m%d %H:%M:%S")
    df.set_index("Datetime", inplace=True)
    
  2. 检查时区一致性
    如果你的数据带时区(比如交易所的UTC时间),但索引未设置时区,resample可能出现分组异常:

    # 给索引设置时区(比如UTC)
    df.index = df.index.tz_localize("UTC")
    # 重采样可指定区间闭合规则
    df_15min = df.resample("15T", closed="left", label="left").agg(...)
    

    注:closed和label参数控制15分钟K线的区间规则,closed="left"表示每个区间包含左端点、排除右端点,符合多数行情软件的K线逻辑。

  3. 确认聚合函数匹配K线规则
    确保agg字典里的每个字段用了正确的聚合逻辑:

    • OPEN:区间内第一个值("first")
    • HIGH:区间内最大值("max")
    • LOW:区间内最小值("min")
    • CLOSE:区间内最后一个值("last")
    • VOLUME:区间内总和("sum")
      聚合函数错误不会报错,但可能导致结果走势异常,需对应K线规则设置。

验证重采样结果

执行完重采样后,打印新数据的头部和索引,确认是否是15分钟间隔:

print(df_15min.head())
print(df_15min.index)

如果索引是15分钟间隔,说明重采样成功,此时绘图就能看到正确的15分钟K线。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 04:05:55