![](/img/trans.png)
[英]convert nested json to dataframe using json_normalize in python
[英]Using pandas json_normalize to convert json into a dataframe, but some columns still have a list that I need to convert
I can successfully use pandas.io.json.json_normalize to convert my json object into the desired dataframe format. 但是,似乎 dataframe 中的某些列未转换为所需的格式,而是在单元格值中保留为列表。
from pandas.io.json import json_normalize
df = json_normalize(res['transactions'])
这会给我这些 df.columns
Index(['tradeID', 'tradeOpened.guaranteedExecutionFee',
'tradeOpened.halfSpreadCost', 'tradeOpened.initialMarginRequired',
'tradeOpened.price', 'tradeOpened.tradeID', 'tradeOpened.units',
'tradesClosed'], dtype='object')
请注意,“tradeOpened.price”和“tradeOpened.tradeID”等列是所需的目标 output,这些似乎可以正常工作。 问题出在“tradesClosed”列 - 我仍然得到一个包含单元格值的列,其中包含一个列表,如下所示:
[{'tradeID': '2239', 'units': '-2838', 'realiz...
我希望将其分解为像 tradeOpened 那样的列。 所以我应该有像'tradeClosed.tradeID'和'tradeClosed.units'这样的列。
似乎需要一个多步转换过程,但我不确定 go 最有效的方法。
任何帮助表示赞赏。
不确定是否有 pandas/json package 有效方式,但我编写了一个迭代器来更新现有列。 (在创建初始 dataframe 时,一些列已经存在于正确的 json 转换中 - 但另一个不正确的列包含需要添加到这些现有列的数据)
for idx in adf.index:
tradeOpenedRow = adf['tradeOpened'][idx]
if type(tradeOpenedRow) == dict:
if type(adf.loc[idx,'tradeOpened.price']) == float:
adf.loc[idx,'tradeOpened.price'] = tradeOpenedRow['price']
if type(adf.loc[idx,'tradeOpened.tradeID']) == float:
adf.loc[idx,'tradeOpened.tradeID'] = tradeOpenedRow['tradeID']
if type(adf.loc[idx,'tradeOpened.units']) == float:
adf.loc[idx,'tradeOpened.units'] = tradeOpenedRow['units']
if type(adf.loc[idx,'tradeOpened.guaranteedExecutionFee']) == float:
adf.loc[idx,'tradeOpened.guaranteedExecutionFee'] = tradeOpenedRow['guaranteedExecutionFee']
if type(adf.loc[idx,'tradeOpened.halfSpreadCost']) == float:
adf.loc[idx,'tradeOpened.halfSpreadCost'] = tradeOpenedRow['halfSpreadCost']
if type(adf.loc[idx,'tradeOpened.initialMarginRequired']) == float:
adf.loc[idx,'tradeOpened.initialMarginRequired'] = tradeOpenedRow['initialMarginRequired']
print('index ', idx, ' values set')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.