我有一个连接到我从中传输数据的API 看起来像这样:
df = pd.DataFrame(columns=('time','bid','ask'))
for line in response.iter_lines(1):
if line:
try:
msg = json.loads(line.decode())
if "instrument" in msg or "tick" in msg:
x = pd.DataFrame([[msg['tick']['time'],msg['tick']['bid'],msg['tick']['ask']]], columns=('time','bid','ask'))
df = df.append(x, ignore_index=True)
except Exception as e:
print("Caught exception when converting message into json\n" + str(e))
我正在接受这个并将其放入数据帧进行处理,如下所示:
x = pd.DataFrame([[msg['tick']['time'],msg['tick']['bid'],msg['tick']['ask']]], columns=('time','bid','ask'))
我的问题是,是否有更有效的方法来获取数据 数据帧比上面的?但是,如果有一种完全不同的方式,那么请赐教!
我特别怀疑这一行:
False
正如我想的那样,获取字典信息可能更有效率。
感谢您的帮助,我真的很感激。
答案 0 :(得分:0)
您不需要将dict转换为DataFrame以便追加,您可以将字典直接传递给append
,如下所示:
df = df.append(msg['tick'],ignore_index=True)
如果你想在一个批次中加载它们,你可以用列表理解来清理响应,只保留带有正确键的条目,然后将其传递给append
(你将无法使用但是要跳过个别例外。)
response_cleaned = [{'time': msg['tick']['time'],
'bid': msg['tick']['bid'],
'ask': msg['tick']['ask']}
for msg in response
if 'tick' in msg
and 'ask' in msg['tick']
and 'time' in msg['tick']
and 'bid' in msg['tick']]
print("{} bad records recieved".format(len(response) - len(response_cleaned)))
df = df.append(response_cleaned)