从字典创建 OHLC 条 - Websocket Stream

问题描述 投票:0回答:1

我正在连接到以这种格式发送消息的 websocket:

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 = pd.DataFrame(list(msg.items()))
df = df.T
df.columns = df.iloc[1]
df = df.T

我希望能够将每条新消息添加到 df 的末尾,直到我有 60 行的 df。然后我计划使用 pd.resample() 可能将其转换为 1 小时条,这样我就可以将它附加到我下载的批量数据中。

我怎样才能至少达到追加行的程度,最好以最有效的方式进行追加。我猜到目前为止我所尝试的可以用更少的代码来完成。

python pandas dictionary pivot reshape
1个回答
1
投票

我会通过维护字典列表并在收集 60 条消息后将其转换为 DataFrame 来做到这一点。

这是一个例子,请注意,当它们到达时,你必须将我的例子调整到

msgs
列表:

import pandas as pd

msgs = []

for _ in range(60):
    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}
    msgs.append(msg)

df = pd.DataFrame(msgs)

df['s'] = pd.to_datetime(df['s'], unit='ms')
df['e'] = pd.to_datetime(df['e'], unit='ms')

df.set_index('s', inplace=True)


ohlc = df.resample('1H').agg({'o': 'first', 'h': 'max', 'l': 'min', 'c': 'last'})

print(ohlc)
© www.soinside.com 2019 - 2024. All rights reserved.