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用fsolve、leastsq对非线性方程组求解

    python用fsolve、leastsq对非线性方程组求解

    这篇文章主要为大家详细介绍了python用fsolve、leastsq对非线性方程组进行求解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • python tkinter组件摆放方式详解

    python tkinter组件摆放方式详解

    这篇文章主要介绍了python tkinter组件摆放方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python中创建表格详细过程

    Python中创建表格详细过程

    这篇文章主要介绍了Python中创建表格,在python中使用tabulate库来创建表格,并针对输出形式进行不断改进来美化输出效果,并给出了代码示例。需要的小伙伴可以参考一下
    2022-02-02
  • python使用opencv实现马赛克效果示例

    python使用opencv实现马赛克效果示例

    这篇文章主要介绍了python使用opencv实现马赛克效果,结合实例形式分析了Python使用cv2模块操作图片实现马赛克效果的相关技巧,需要的朋友可以参考下
    2019-09-09
  • python分块读取大数据,避免内存不足的方法

    python分块读取大数据,避免内存不足的方法

    今天小编就为大家分享一篇python分块读取大数据,避免内存不足的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python小工具之消耗系统指定大小内存的方法

    Python小工具之消耗系统指定大小内存的方法

    今天小编就为大家分享一篇Python小工具之消耗系统指定大小内存的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python虚拟环境venv的使用方法

    Python虚拟环境venv的使用方法

    venv 是 Python 里的一个标准工具,它的主要功能是帮助用户管理和控制虚拟环境,venv 的使用方法其实非常简单,下面我将详细介绍如何创建虚拟环境,如何激活虚拟环境,以及如何退出虚拟环境的操作步骤,需要的朋友可以参考下
    2024-03-03
  • python threading模块操作多线程介绍

    python threading模块操作多线程介绍

    这篇文章主要介绍了python threading模块操作多线程介绍,本文给出简单使用实例,需要的朋友可以参考下
    2015-04-04
  • pandas库中 DataFrame的用法小结

    pandas库中 DataFrame的用法小结

    这篇文章主要介绍了pandas库中 DataFrame的用法,利用pandas.DataFrame可以构建表格,通过列标属性调用列对象,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • python字符串的index和find的区别详解

    python字符串的index和find的区别详解

    这篇文章主要介绍了python字符串的index和find的区别,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06

最新评论