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

如何高效从WebSocket字典消息生成OHLC Bars并追加DataFrame行

高效处理WebSocket消息并构建DataFrame方案

一、简化单条消息转DataFrame的代码

你之前的转换代码过于繁琐,直接用pd.DataFrame([msg])就能将单条字典格式的消息转换为带正确列名的单行DataFrame,无需多次转置操作。

示例代码:

import pandas as pd

# 单条WebSocket消息转DataFrame
msg = {'ev': 'A', 'sym': 'SPY', 'v': 222, 'av': 107783639, 'op': 391.841, 'vw': 396.45, 'o': 396.45, 'c': 396.45, 'h': 396.45, 'l': 396.45, 'a': 393.1093, 'z': 27, 's': 1679696390000, 'e': 1679696391000}
df_single = pd.DataFrame([msg])

二、高效实现消息追加(直到60行)

不要使用已被弃用的df.append()逐行追加,推荐用列表暂存消息字典,攒够60条后一次性转换为DataFrame,这种方式性能远高于逐行操作。

实现逻辑:

  • 初始化空列表存储消息字典
  • 每收到一条WebSocket消息,将字典追加到列表中
  • 当列表长度达到60时,批量转换为DataFrame

示例代码:

# 初始化消息存储列表
msg_list = []

# 模拟WebSocket消息接收循环(实际替换为你的WS回调逻辑)
while len(msg_list) < 60:
    # 替换为实际获取WS消息的代码
    msg = {'ev': 'A', 'sym': 'SPY', 'v': 222, 'av': 107783639, 'op': 391.841, 'vw': 396.45, 'o': 396.45, 'c': 396.45, 'h': 396.45, 'l': 396.45, 'a': 393.1093, 'z': 27, 's': 1679696390000, 'e': 1679696391000}
    msg_list.append(msg)

# 批量转换为DataFrame
df = pd.DataFrame(msg_list)

三、生成1小时K线并合并批量数据

首先需要将时间戳列转换为datetime类型并设置为索引,再通过resample()完成1小时K线的聚合,最后合并到已有批量数据中。

示例代码:

# 将时间戳(以's'列为例)转换为datetime并设为索引
df['timestamp'] = pd.to_datetime(df['s'], unit='ms')
df.set_index('timestamp', inplace=True)

# 1小时重采样,按需定义字段聚合规则
hourly_df = df.resample('1H').agg({
    'o': 'first',  # 开盘价取时段第一条数据
    'h': 'max',    # 最高价取时段最大值
    'l': 'min',    # 最低价取时段最小值
    'c': 'last',   # 收盘价取时段最后一条数据
    'v': 'sum',    # 成交量求和
    'av': 'last'   # 其他字段根据业务需求调整聚合方式
})

# 合并到已下载的批量数据(假设batch_df为你的批量数据,需确保时间格式一致)
combined_df = pd.concat([batch_df, hourly_df]).sort_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:52:55