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 制作网站小说下载器

    python 制作网站小说下载器

    这篇文章主要介绍了python 如何制作网站小说下载器,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-02-02
  • python网络编程:socketserver的基本使用方法实例分析

    python网络编程:socketserver的基本使用方法实例分析

    这篇文章主要介绍了python网络编程:socketserver的基本使用方法,结合实例形式分析了python网络编程中socketserver的基本功能、使用方法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • 详解OpenCV执行连通分量标记的方法和分析

    详解OpenCV执行连通分量标记的方法和分析

    在本教程中,您将学习如何使用 OpenCV 执行连通分量标记和分析。具体来说,我们将重点介绍 OpenCV 最常用的连通分量标记函数:cv2.connectedComponentsWithStats,感兴趣的可以了解一下
    2022-08-08
  • 详解PyQt5中Thread多线程的使用

    详解PyQt5中Thread多线程的使用

    QThread是Qt线程类中最核心的底层类,这篇文章主要为大家介绍了PyQt5中Thread多线程的具体使用,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-08-08
  • Django中使用极验Geetest滑动验证码过程解析

    Django中使用极验Geetest滑动验证码过程解析

    这篇文章主要介绍了Django中使用极验Geetest滑动验证码过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python类中的魔法方法之 __slots__原理解析

    Python类中的魔法方法之 __slots__原理解析

    这篇文章主要介绍了Python类中的魔法方法之 __slots__详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • anaconda jupyter不能导入安装的lightgbm解决方案

    anaconda jupyter不能导入安装的lightgbm解决方案

    这篇文章主要介绍了anaconda jupyter不能导入安装的lightgbm解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • python实现telnet客户端的方法

    python实现telnet客户端的方法

    这篇文章主要介绍了python实现telnet客户端的方法,分析了Python中telnetlib模块实现telnet操作的方法,并实例叙述了Telnet客户端的实现技巧,需要的朋友可以参考下
    2015-04-04
  • 对Tensorflow中的矩阵运算函数详解

    对Tensorflow中的矩阵运算函数详解

    今天小编就为大家分享一篇对Tensorflow中的矩阵运算函数详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python切换hosts文件代码示例

    python切换hosts文件代码示例

    开发或者测试网站程序时,我们很多时候都会遇到多个hosts文件来回切换,windows的hosts文件目录比较深,麻烦,因此,用python写了个小脚本来简化此功能
    2013-12-12

最新评论