【问题标题】:Import hierarchichal JSON file into Pandas dataframe将分层 JSON 文件导入 Pandas 数据框
【发布时间】:2019-10-13 01:22:21
【问题描述】:

我已经为我的问题寻找解决方案,但找不到任何适用的方法。我正在尝试将高维 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
)

等等。

非常感谢任何有关如何解决此问题的建议。

【问题讨论】:

  • 一种可能的解决方案:将 json 展平为 pandas 数据框后,您可以将标签按. 拆分为新列。
  • 您希望每一行都为shiftX?那么第一行是shift1,第二行是shift2,等等?
  • 你能分享整个json文件吗?或者至少与您想要的 2 行数据一样多?
  • Pandas 数据框不擅长处理分层数据。他们有类似 CSV 文件或 Excel 电子表格的行和列的概念,所以你应该决定你希望你的数据框是什么样子,用json.load 加载 json,将其转换为适合pd.DataFrame 的格式的 2D 数据和从中构建数据框。

标签: python json pandas


【解决方案1】:

我通过扁平化字典想出了一个数据框:

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 作为字典导入。

【讨论】:

    猜你喜欢
    • 2021-01-21
    • 2012-12-11
    • 1970-01-01
    • 2017-09-25
    • 2020-08-27
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多