使用pandas json\u normalize将json转换为dataframe,但是有些列仍然有一个列表,我需要修改

2024-09-30 16:23:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以成功地使用熊猫.io.json.json\u normalize将json对象转换为所需的数据帧格式。但是,似乎有些列在数据帧中没有转换成所需的格式,而是作为列表留在单元格值中。你知道吗

from pandas.io.json import json_normalize
df = json_normalize(res['transactions'])

这会给我这些测向列你知道吗

Index(['tradeID', 'tradeOpened.guaranteedExecutionFee',
       'tradeOpened.halfSpreadCost', 'tradeOpened.initialMarginRequired',
       'tradeOpened.price', 'tradeOpened.tradeID', 'tradeOpened.units',
       'tradesClosed'], dtype='object')

请注意列,例如'交易价格'和'tradeOpened.tradeID'是所需的目标输出,这些似乎工作正常。问题在于“tradesClosed”列-我仍然得到一个包含单元格值的列,其中的列表如下所示:

[{'tradeID': '2239', 'units': '-2838', 'realiz...

我想把它分成几列,就像交易记录一样。所以我应该有这样的栏目tradeClosed.tradeID'和'贸易结算单位'. 你知道吗

这似乎是一个多步骤的转换过程将是必要的,但我不确定最有效的方式去做这件事。你知道吗

谢谢你的帮助。你知道吗


Tags: 数据对象fromioimportjsonpandasdf
1条回答
网友
1楼 · 发布于 2024-09-30 16:23:42

不确定是否有pandas/json包的有效方法,但我编写了一个迭代器来更新现有的列。(在创建初始数据帧时,一些列已经存在于正确的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')

相关问题 更多 >