已经有一些像这样的帖子,但在关注它们之后我仍然遇到一些问题。
trade = client.get_my_trades(symbol=ticker) # fetching all trades made on the ticker IOSTBTC
print(trade)
json_trade = json.dumps(trade, indent=4) # converting and indenting for easier readability.
print(json_trade+"\n")
json_normalised = json_normalize(trade) # normalising with pandas for spreadsheet use
print("Normalised JSON\n", json_normalised)
json_normalised = DataFrame(pandas.read_json("logs.xlsx"))
json_normalised_str = str(json_normalised)
logs = open("logs.xlsx", "w") # creating file to write to
logs.write(json_normalised_str) # writing data to file, oldest first
此代码运行正常,没有错误。但是,当我检查logs.xlsx时,所有数据都在一个列中,中间有空格,它们应按列分隔。
例如,这里有一些JSON数据:
[{'id': 3084149, 'orderId': 7071890, 'price': '0.00000312', 'qty': '400.00000000', 'commission': '0.00041327', 'commissionAsset': 'BNB', 'time': 1522223234240, 'isBuyer': True, 'isMaker': True, 'isBestMatch': True}, {'id': 3084468, 'orderId': 7073272, 'price': '0.00000314', 'qty': '400.00000000', 'commission': '0.00041694', 'commissionAsset': 'BNB', 'time': 1522223910252, 'isBuyer': False, 'isMaker': True, 'isBestMatch': True}]
我想要的是'id'和'orderId'和'price'(等等)拥有它自己的专栏。有了上面的数据,我会有两行信息。但相反,这是我在使用此数据时收到的内容:
我该怎么办?
答案 0 :(得分:2)
您无法使用open("logs.xlsx", "w")
创建正确的xlsx
文件,因为它会将原始文本(或使用wb
时的字节)写入文件。 xlsx
比这更复杂。
相反,只需使用pandas.DataFrame.from_dict
:
data = [{'id': 3084149, 'orderId': 7071890, 'price': '0.00000312', 'qty': '400.00000000', 'commission': '0.00041327', 'commissionAsset': 'BNB', 'time': 1522223234240, 'isBuyer': True, 'isMaker': True, 'isBestMatch': True}, {'id': 3084468, 'orderId': 7073272, 'price': '0.00000314', 'qty': '400.00000000', 'commission': '0.00041694', 'commissionAsset': 'BNB', 'time': 1522223910252, 'isBuyer': False, 'isMaker': True, 'isBestMatch': True}]
df = pd.DataFrame.from_dict(data)
print(df)
# commission commissionAsset id isBestMatch isBuyer isMaker \
# 0 0.00041327 BNB 3084149 True True True
# 1 0.00041694 BNB 3084468 True False True
# orderId price qty time
# 0 7071890 0.00000312 400.00000000 1522223234240
# 1 7073272 0.00000314 400.00000000 1522223910252
然后,导出到电子表格与调用to_excel
:
df.to_excel('logs.xlsx')
如果您不希望将索引导出到电子表格,则可以使用index=False
:df.to_excel('logs.xlsx', index=False)
。有关详细信息,请参阅docs。