将json请求转换为 Dataframe 到csv

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

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

  1. "MessageCode":1502,
  2. "MessageVersion":4,
  3. "ApplicationType":0,
  4. "TokenID":0,
  5. "ExchangeSegment":1,
  6. "ExchangeInstrumentID":22,
  7. "ExchangeTimeStamp":1309954231,
  8. "Bids":[{"Size":21,"Price":1999.15,"TotalOrders":2,"BuyBackMarketMaker":0},
  9. {"Size":20,"Price":1999.1,"TotalOrders":1,"BuyBackMarketMaker":0},
  10. {"Size":40,"Price":1999.05,"TotalOrders":1,"BuyBackMarketMaker":0},
  11. {"Size":185,"Price":1999,"TotalOrders":6,"BuyBackMarketMaker":0},
  12. {"Size":7,"Price":1998.8,"TotalOrders":2,"BuyBackMarketMaker":0}],
  13. "Asks":[{"Size":1,"Price":1999.8,"TotalOrders":1,"BuyBackMarketMaker":0},
  14. {"Size":3,"Price":1999.85,"TotalOrders":1,"BuyBackMarketMaker":0},
  15. {"Size":34,"Price":1999.9,"TotalOrders":2,"BuyBackMarketMaker":0},
  16. {"Size":199,"Price":2000,"TotalOrders":10,"BuyBackMarketMaker":0},
  17. {"Size":1,"Price":2000.05,"TotalOrders":1,"BuyBackMarketMaker":0}],
  18. "Touchline":{"BidInfo":{"Size":21,"Price":1999.15,"TotalOrders":2,"BuyBackMarketMaker":0},
  19. "AskInfo":{"Size":1,"Price":1999.8,"TotalOrders":1,"BuyBackMarketMaker":0},
  20. "LastTradedPrice":1999.9,
  21. "LastTradedQunatity":12,
  22. "TotalBuyQuantity":145954,
  23. "TotalSellQuantity":81287,
  24. "TotalTradedQuantity":114118,
  25. "AverageTradedPrice":1999.65,
  26. "LastTradedTime":1309954224,
  27. "LastUpdateTime":1309954231,
  28. "PercentChange":0.6365580576173091,
  29. "Open":1997.65,
  30. "High":2006.6,
  31. "Low":1989.1,
  32. "Close":1987.25,
  33. "TotalValueTraded":null,
  34. "BuyBackTotalBuy":0,
  35. "BuyBackTotalSell":0},
  36. "BookType":1,
  37. "XMarketType":1,
  38. "SequenceNumber":476310325663841}

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

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

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

暂无答案!

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

相关问题