将层次结构JSON文件导入Pandas数据框

时间:2019-05-27 12:54:27

标签: python json pandas

我一直在寻找解决问题的方法,但是找不到适用的方法。我正在尝试将高维JSON文件导入Pandas数据框。

结构类似于:

{   'manufacturing_plant_events':
        {   'data':
            {   'shiftInformation':
                {   'shift1':
                    { 'color': 'red'
                        , 'amount' : 32
                        , 'order' : None
                    },
                    'shift2':
                    { 'color': 'blue'
                        , 'amount' : 44
                        , 'order' : 1
                    },
                    'shift3':
                    { 'color': 'green'
                        , 'amount' : 98
                        , 'order' : 2
                    }
                }
            ...}
        ...}
    }

我尝试了许多解决方案,包括:

  • json.loads()
  • pd.DataFrame(json)
  • json_normalize(json)
  • pd.read_json(json)

和其他方法,我尝试将数组展平并将其转换为也不起作用的数据框bu。我不确定这是否可能,或者数据框是否仅支持几层嵌套。

我尝试的拼合只是尝试在包含叶子信息的数据框中创建列。因此,我也可以使用一个数据框,该数据框具有以下列名称,即完整路径和值,即存储在节点中的实际值。

数据框中的第一行:

(
manufacturing_plant_events.data.shiftInformation.shift1.color
'red'

manufacturing_plant_events.data.shiftInformation.shift1.amount
32

manufacturing_plant_events.data.shiftInformation.shift1.order
None
)

以此类推。

任何有关如何解决此问题的建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

我通过展平dict提出了一个数据框:

import pandas as pd

def flat_dict(dictionary, prefix):
    if type(dictionary) == dict:
        rows = []

        for key, items in dictionary.items():
            rows += flat_dict(items, prefix + [key])   

        return rows

    else:
        return [prefix + [dictionary]]

def dict_to_df(dictionary):        
    return pd.DataFrame(flat_dict(dictionary, []))

肯定要感谢json软件包,才能将json作为dict导入。