如何将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"])
其他排查方向
验证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)检查时区一致性
如果你的数据带时区(比如交易所的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线逻辑。确认聚合函数匹配K线规则
确保agg字典里的每个字段用了正确的聚合逻辑:- OPEN:区间内第一个值(
"first") - HIGH:区间内最大值(
"max") - LOW:区间内最小值(
"min") - CLOSE:区间内最后一个值(
"last") - VOLUME:区间内总和(
"sum")
聚合函数错误不会报错,但可能导致结果走势异常,需对应K线规则设置。
- OPEN:区间内第一个值(
验证重采样结果
执行完重采样后,打印新数据的头部和索引,确认是否是15分钟间隔:
print(df_15min.head()) print(df_15min.index)
如果索引是15分钟间隔,说明重采样成功,此时绘图就能看到正确的15分钟K线。
内容的提问来源于stack exchange,提问作者user22272028
相关产品推荐
相关产品推荐

