【发布时间】:2018-03-24 00:09:12
【问题描述】:
想知道是否有人可以提供帮助。我正在尝试从 websocket 中获取数据并将其放入 DataFrame 中,而每行中没有多个字典。我用来从币安提取的代码是:
from binance.client import Client
from binance.websockets import BinanceSocketManager
from binance.enums import *
import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
import pandas as pd
import pandas_datareader.data as web
from pandas.io.json import json_normalize
client = Client('api-key', 'api-secret')
tickers = client.get_all_tickers()
df = pd.DataFrame([])
count = 0
bm = None
### Multiplex socket
# Save incoming data
def process_message(msg):
global count, df, bm
print("stream: {} data: {}".format(msg['stream'], msg['data']))
# append message to array
df = df.append(msg, ignore_index=True)
count += 1
with open('klinesmultiplex_socket.csv', 'a') as f:
df.to_csv(f, header=False)
#df = pd.DataFrame(df)
#df.to_csv('test.csv')
def initiate():
global bm
# Connect to client
client = Client('api-key', 'api-secret')
# Setup Socket
bm = BinanceSocketManager(client)
# then start the socket manager
conn_key = bm.start_multiplex_socket(['bnbbtc@kline_1m', 'neobtc@kline_1m'], process_message)
# start the socket
bm.start()
initiate()
这是保存在 csv 中的内容:
0,"{'e': 'kline', 'E': 1521847596412, 's': 'NEOBTC', 'k': {'t': 1521847560000, 'T': 1521847619999, 's': 'NEOBTC', 'i': '1m', 'f': 11202559, 'L': 11202604, 'o': '0.00765700', 'c': '0.00765900', 'h': '0.00766000', 'l': '0.00765400', 'v': '182.38000000', 'n': 46, 'x': False, 'q': '1.39674356', 'V': '131.09000000', 'Q': '1.00404646', 'B': '0'}}",neobtc@kline_1m
0,"{'e': 'kline', 'E': 1521847596412, 's': 'NEOBTC', 'k': {'t': 1521847560000, 'T': 1521847619999, 's': 'NEOBTC', 'i': '1m', 'f': 11202559, 'L': 11202604, 'o': '0.00765700', 'c': '0.00765900', 'h': '0.00766000', 'l': '0.00765400', 'v': '182.38000000', 'n': 46, 'x': False, 'q': '1.39674356', 'V': '131.09000000', 'Q': '1.00404646', 'B': '0'}}",neobtc@kline_1m
1,"{'e': 'kline', 'E': 1521847597055, 's': 'BNBBTC', 'k': {'t': 1521847560000, 'T': 1521847619999, 's': 'BNBBTC', 'i': '1m', 'f': 12744199, 'L': 12744341, 'o': '0.00132050', 'c': '0.00131530', 'h': '0.00132200', 'l': '0.00131500', 'v': '5571.10000000', 'n': 143, 'x': False, 'q': '7.33546205', 'V': '2637.29000000', 'Q': '3.47577851', 'B': '0'}}",bnbbtc@kline_1m
0,"{'e': 'kline', 'E': 1521847596412, 's': 'NEOBTC', 'k': {'t': 1521847560000, 'T': 1521847619999, 's': 'NEOBTC', 'i': '1m', 'f': 11202559, 'L': 11202604, 'o': '0.00765700', 'c': '0.00765900', 'h': '0.00766000', 'l': '0.00765400', 'v': '182.38000000', 'n': 46, 'x': False, 'q': '1.39674356', 'V': '131.09000000', 'Q': '1.00404646', 'B': '0'}}",neobtc@kline_1m
但是,我正在寻找它看起来像这样(或者甚至去掉第 0 列中的值......不确定那是什么):
0, 'kline', 1521847596412, NEOBTC', 1521847560000, 1521847619999, 'NEOBTC', '1m', 11202559, 11202604, 0.00765700, 0.00765900, 0.00766000, 0.00765400, 182.38000000, 46, False, 1.39674356', 131.09000000, 1.00404646,0,neobtc@kline_1m
0,'kline', 1521847596412, 'NEOBTC', 1521847560000, 1521847619999, 'NEOBTC', '1m', 11202559, 11202604, 0.00765700, 0.00765900, 0.00766000, 0.00765400, 182.38000000, 46, False, 1.39674356, 131.09000000, 1.00404646, 0,neobtc@kline_1m
1,'kline', 1521847597055, 'BNBBTC', 1521847560000, 1521847619999, 'BNBBTC', '1m', 12744199, 12744341, 0.00132050, 0.00131530, 0.00132200, 0.00131500, 5571.10000000, 143, False, 7.33546205, 2637.29000000, 3.47577851, 0,bnbbtc@kline_1m
0,'kline', 1521847596412, 'NEOBTC', 1521847560000, 1521847619999, 'NEOBTC', '1m', 11202559, 11202604,0.00765700, 0.00765900, 0.00766000, 0.00765400, 182.38000000, 46, False, 1.39674356, 131.09000000, 1.00404646, 0,neobtc@kline_1m
我尝试了很多东西,但无法让它工作:Json 到 DataFrame,多个字典到 DataFrame,以及其他一些东西。如果我在寻找正确的地方,请告诉我。一些数字显示为“xxxx.xxxx”,而不仅仅是 xxxx.xxxx。
我最终想做的是获取所有代码数据并将每个代码从上面的流中保存到一个单独的文件中。即NEOBTC amnd BNBBTC 将被保存在他们自己的csv 中。我只希望它在 'x': True 时保存,但是。
对于我遇到的任何问题,我们将不胜感激,感谢您抽出宝贵时间查看此内容。
【问题讨论】:
-
最终目标是生成 CSV 文件,还是将数据保存在内存中的 DataFrame 中并停止写入文件?
-
最终目标是生成一个 csv 文件。但是,我可以生成 csv,但数据如上,即字典中的字典,但我希望它看起来像底部示例
标签: json python-3.x dataframe websocket