将json请求转换为 Dataframe 到csv

30byixjq  于 2021-08-25  发布在  Java
关注(0)|答案(0)|浏览(190)

我需要一个数据结构来处理数据和转换为csv。我使用了pandas.dataframe soo-far(2d数组)。
api将发送大约22000个字符串,我需要将它们转换为22000行。
转换为json的示例字符串:

"MessageCode":1502,
"MessageVersion":4,
"ApplicationType":0,
"TokenID":0,
"ExchangeSegment":1,
"ExchangeInstrumentID":22,
"ExchangeTimeStamp":1309954231,
"Bids":[{"Size":21,"Price":1999.15,"TotalOrders":2,"BuyBackMarketMaker":0},
{"Size":20,"Price":1999.1,"TotalOrders":1,"BuyBackMarketMaker":0},
{"Size":40,"Price":1999.05,"TotalOrders":1,"BuyBackMarketMaker":0},
{"Size":185,"Price":1999,"TotalOrders":6,"BuyBackMarketMaker":0},
{"Size":7,"Price":1998.8,"TotalOrders":2,"BuyBackMarketMaker":0}],
"Asks":[{"Size":1,"Price":1999.8,"TotalOrders":1,"BuyBackMarketMaker":0},
{"Size":3,"Price":1999.85,"TotalOrders":1,"BuyBackMarketMaker":0},
{"Size":34,"Price":1999.9,"TotalOrders":2,"BuyBackMarketMaker":0},
{"Size":199,"Price":2000,"TotalOrders":10,"BuyBackMarketMaker":0},
{"Size":1,"Price":2000.05,"TotalOrders":1,"BuyBackMarketMaker":0}],
"Touchline":{"BidInfo":{"Size":21,"Price":1999.15,"TotalOrders":2,"BuyBackMarketMaker":0},
"AskInfo":{"Size":1,"Price":1999.8,"TotalOrders":1,"BuyBackMarketMaker":0},
"LastTradedPrice":1999.9,
"LastTradedQunatity":12,
"TotalBuyQuantity":145954,
"TotalSellQuantity":81287,
"TotalTradedQuantity":114118,
"AverageTradedPrice":1999.65,
"LastTradedTime":1309954224,
"LastUpdateTime":1309954231,
"PercentChange":0.6365580576173091,
"Open":1997.65,
"High":2006.6,
"Low":1989.1,
"Close":1987.25,
"TotalValueTraded":null,
"BuyBackTotalBuy":0,
"BuyBackTotalSell":0},
"BookType":1,
"XMarketType":1,
"SequenceNumber":476310325663841}

在所有这些中,我只想要30列[竞价1,竞价1,竞价1,竞价2,竞价2,竞价2,….竞价5,竞价5,竞价5,竞价1,竞价1,竞价1,….竞价5,竞价5,竞价5,竞价5,竞价5]
每个公司都有一个不同的“exchangeinstrumentid”,因此需要设置一些条件,将它们划分为不同的CSV。
这就是我迄今为止所尝试的:

res = json.loads(data)
df1 = pd.json_normalize(res, 'Bids').add_prefix('bid')
df2 = pd.json_normalize(res, 'Asks','MessageCode').add_prefix('ask')
df3 = pd.json_normalize(res).drop(['Bids','Asks'], axis=1)
df4 = (pd.concat([df1, df2], axis=1).rename(columns=
              'askMessageCode':'MessageCode'}).merge(df3, on='MessageCode', how='left'))
df=df.append(df4, ignore_index=True)
file_name = ticker + '_' + str(now.year) + '{:02d}'.format(now.month) + 
                              '{:02d}'.format(now.day) + '.csv'
file_path = 'd:/Downloads/cash_market/' + file_name
print(file_path)

df.to_csv(file_path , index = False)

这个df有22000*500行,而我需要500个不同的CSV。感谢您的帮助。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题