使用pandas中的DataFrame从JSON数据制作电子表格

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

已经有一些像这样的帖子,但在关注它们之后我仍然会遇到一些问题。

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'(等等)拥有它自己的专栏。有了上面的数据,我会有两行信息。但相反,这是我在使用这些数据时收到的:spreadsheet screenshot

我能做什么?

python python-3.x pandas dataframe
1个回答
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')

enter image description here

如果您不喜欢将索引导出到电子表格,可以使用index=Falsedf.to_excel('logs.xlsx', index=False)。有关更多信息,请参阅docs

© www.soinside.com 2019 - 2024. All rights reserved.