Python Pandas实现将嵌套JSON数据转换DataFrame

 更新时间:2024年01月28日 10:01:39   作者:python收藏家  
对于复杂的JSON数据进行分析时,通常的做法是将JSON数据结构转换为Pandas DataFrame,所以本文就来看看将嵌套JSON数据转换为Pandas DataFrame的具体方法吧

对于复杂的JSON数据进行分析时,通常的做法是将JSON数据结构转换为Pandas DataFrame,因为它可以帮助更方便地操作和可视化数据。在本文中,让我们考虑不同的嵌套JSON数据结构,并使用内置和自定义函数将它们扁平化。

Pandas有一个很好的内置函数json_normalize(),可以将简单到中等半结构化的嵌套JSON结构扁平化为数据表。

语法: pandas.json_normalize(data, errors=’raise’, sep=’.’, max_level=None)

参数:

  • data - 字典或字典列表
  • errors - {‘raise’, ‘ignore’},,默认值”raise“
  • sep - str,默认值“.”嵌套记录将生成由指定分隔符分隔的名称。
  • max_level - int,默认为None。要规格化的最大级别数(字典深度)。

JSON - > Pandas DataFrame示例

大多数通过从Web提取的数据都是JSON数据类型的形式,因为JSON是在Web应用程序中传输数据的首选数据类型。首选JSON的原因是,由于文件大小很小,它非常轻量级,可以在HTTP请求和响应中来回发送。

下面是我们可以在Python中扁平化嵌套json的示例:

示例1:Pandas json_normalize函数

考虑一个嵌套字典列表,其中包含有关学生及其分数的详细信息。在这个JSON数据结构上使用pandas json_normalize,将其扁平化为一个扁平表,如图所示

import pandas as pd

data = [
	{"Roll no": 1,
	"student": {"first_name": "Ram", "last_name": "kumar"}
	},
	{"student": {"English": "95", "Math": "88"}
	},
	{"Roll no": 2,
	"student": {"first_name": "Joseph", "English": "90", "Science": "82"}
	},
	{"Roll no": 3,
	"student": {"first_name": "abinaya", "last_name": "devi"},
	"student": {"English": "91", "Math": "98"}
	},
]

df = pd.json_normalize(data)
print(df)

输出

   Roll no student.first_name student.last_name student.English student.Math student.Science
0        1                Ram            kumar            NaN          NaN             NaN
1      NaN                NaN              NaN             95           88             NaN
2        2             Joseph              NaN             90          NaN              82
3        3            abinaya             devi             91           98             NaN

示例2:使用max_level=0在Pandas中展平嵌套的JSON

现在让我们使用max_level选项将一个稍微复杂的JSON结构扁平化为一个扁平表。在这个例子中,我们考虑了max_level为0,这意味着只扁平化JSON的第一层,并且可以对结果进行实验。

在这里,我们考虑了一个JSON格式的不同个人健康记录的示例。

import pandas as pd

​​​​​​​data = [
    {
        "id": 1,
        "candidate": "Roberto mathews",
        "health_index": {"bmi": 22, "blood_pressure": 130},
    },
    {"candidate": "Shane wade", "health_index": {"bmi": 28, "blood_pressure": 160}},
    {
        "id": 2,
        "candidate": "Bruce tommy",
        "health_index": {"bmi": 31, "blood_pressure": 190},
    },
]
pd.json_normalize(data, max_level=0)

输出

由于我们只使用了一个层次的扁平化,第二个层次被保留为键值对

    id    candidate    health_index
0    1.0    Roberto mathews    {'bmi': 22, 'blood_pressure': 130}
1    NaN    Shane wade    {'bmi': 28, 'blood_pressure': 160}
2    2.0    Bruce tommy    {'bmi': 31, 'blood_pressure': 190}

示例3:使用max_level=1在Pandas中展平嵌套的JSON

现在让我们使用与上面相同的JSON数据结构,max_level为1,这意味着将JSON的前两个级别扁平化,并可以对结果进行实验。

import pandas as pd
 
data = [
    {
        "id": 1,
        "candidate": "Roberto mathews",
        "health_index": {"bmi": 22, "blood_pressure": 130},
    },
    {"candidate": "Shane wade", "health_index": {"bmi": 28, "blood_pressure": 160}},
    {
        "id": 2,
        "candidate": "Bruce tommy",
        "health_index": {"bmi": 31, "blood_pressure": 190},
    },
]
pd.json_normalize(data, max_level=1)

输出

    id    candidate    health_index.bmi    health_index.blood_pressure
0    1.0    Roberto mathews    22    130
1    NaN    Shane wade    28    160
2    2.0    Bruce tommy    31    190

示例4:将Meta参数传递给json_normalize

最后,让我们考虑一个深度嵌套的JSON结构,通过将Meta参数传递给json_normalize函数,可以将其转换为数据表,如下所示。

这里,在下面的代码中,我们已经将JSON必须解析到数据表的时间顺序传递给了它。在下面的代码中,我们首先建议解析部门键,然后是公司和标语,然后,我们将management和CEO键作为嵌套列表传递,表明它们必须作为单个字段解析。

import pandas as pd
data = [
    {
        "company": "Google",
        "tagline": "Dont be evil",
        "management": {"CEO": "Sundar Pichai"},
        "department": [
            {"name": "Gmail", "revenue (bn)": 123},
            {"name": "GCP", "revenue (bn)": 400},
            {"name": "Google drive", "revenue (bn)": 600},
        ],
    },
    {
        "company": "Microsoft",
        "tagline": "Be What's Next",
        "management": {"CEO": "Satya Nadella"},
        "department": [
            {"name": "Onedrive", "revenue (bn)": 13},
            {"name": "Azure", "revenue (bn)": 300},
            {"name": "Microsoft 365", "revenue (bn)": 300},
        ],
    },

​​​​​​​]
result = pd.json_normalize(
    data, "department", ["company", "tagline", ["management", "CEO"]]
)
result

输出

          name  revenue (bn)   company         tagline management.CEO
0        Gmail           123    Google    Dont be evil  Sundar Pichai
1          GCP           400    Google    Dont be evil  Sundar Pichai
2  Google drive           600    Google    Dont be evil  Sundar Pichai
3     Onedrive            13  Microsoft  Be What's Next  Satya Nadella
4        Azure           300  Microsoft  Be What's Next  Satya Nadella
5  Microsoft 365           300  Microsoft  Be What's Next  Satya Nadella

以上就是Python Pandas实现将嵌套JSON数据转换DataFrame的详细内容,更多关于Pandas实现JSON数据转DataFrame的资料请关注脚本之家其它相关文章!

相关文章

  • python 基于pygame实现俄罗斯方块

    python 基于pygame实现俄罗斯方块

    这篇文章主要介绍了python 基于pygame实现俄罗斯方块的方法,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • python列表生成器常用迭代器示例详解

    python列表生成器常用迭代器示例详解

    这篇文章主要为大家介绍了python列表生成器常用迭代器示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 解读python正则表达式括号问题

    解读python正则表达式括号问题

    这篇文章主要介绍了python正则表达式括号问题解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • python绘制漏斗图步骤详解

    python绘制漏斗图步骤详解

    在本文里我们给大家整理了关于python绘制漏斗图的相关知识点以及具体步骤,有需要的朋友们跟着学习下。
    2019-03-03
  • python实现照片集变成视频的代码实现

    python实现照片集变成视频的代码实现

    看着电脑里乱七八糟的照片,有大有小,宽高不一,突然想找个方式把他们统一起来,然后做成视频更好,所以本文给大家介绍了python实现照片集变成视频的实现,需要的朋友可以参考下
    2024-10-10
  • Python基础之标准库和常用的第三方库案例教程

    Python基础之标准库和常用的第三方库案例教程

    这篇文章主要介绍了Python基础之标准库和常用的第三方库案例教程,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • python处理emoji表情(两个函数解决两者之间的联系)

    python处理emoji表情(两个函数解决两者之间的联系)

    这篇文章主要介绍了python处理emoji表情,主要通过两个函数解决两者之间的联系,本文通过实例代码给大家介绍的非常完美,对python emoji表情的相关知识感兴趣的朋友一起看看吧
    2021-05-05
  • 分享6个隐藏的python功能

    分享6个隐藏的python功能

    给大家详细分析了6个隐藏的python功能,并详细讲解了每个功能用法,需要的朋友学习下吧。
    2017-12-12
  • 对Django外键关系的描述

    对Django外键关系的描述

    今天小编就为大家分享一篇对Django外键关系的描述,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python调用工具包实现发送邮件服务

    Python调用工具包实现发送邮件服务

    这篇文章主要为大家详细介绍了Python图画调用工具包实现发送邮件服务的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-05-05

最新评论