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

Pandas如何创建空DataFrame追加数据且不生成新对象

问题根源

当前代码存在3个直接导致异常的逻辑错误:

  • 每次触发K线闭合判断时都会重新初始化空DataFrame,此前存储的所有历史收盘价会被直接清空
  • 拼接新数据时未重置索引,每次生成的单行DataFrame默认索引均为0,最终出现重复索引
  • 拼接顺序为新数据放在旧数据头部,和按接收顺序递增排列的需求完全相反
正确实现

把DataFrame初始化逻辑移到Websocket监听循环外部,程序启动时仅初始化一次,收到新收盘价时追加数据并自动生成连续索引即可:

# 初始化操作放在Websocket连接逻辑前,仅执行1次
df = pd.DataFrame(columns=['close'])

# 下方为Websocket消息回调内的处理逻辑
if candle_closed:
    close_val = float(candle['c'])
    # 追加新行,ignore_index=True会自动生成从0开始的连续递增索引
    df = pd.concat(
        [df, pd.DataFrame([close_val], columns=['close'])],
        ignore_index=True
    )

# 如果需要索引起始值为1而非默认的0,追加完成后统一偏移索引即可
df.index = df.index + 1

执行后输出结果完全匹配预期:

close
1  20431.65
2  20439.63
性能优化建议

如果接入的是低周期K线(比如1s、1min级别),高频调用pd.concat会产生不必要的性能开销,可以先把收到的收盘价暂存在普通Python列表中,每积累固定条数(比如50/100条)再一次性批量写入DataFrame,运行效率会提升数倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:48:19