首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python & Pandas:使用pd.json_normalize扁平化嵌套json

pd.json_normalize 是 pandas 库中的一个函数,用于将嵌套的 JSON 数据扁平化为一个表格形式的数据结构,通常是 DataFrame。这个函数在处理复杂的 JSON 数据时非常有用,尤其是当数据包含多层嵌套或者数组时。

基础概念

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON 数据通常以键值对的形式表示,可以包含嵌套的对象和数组。

Pandas 是一个 Python 数据分析库,提供了大量的数据结构和数据分析工具,其中 DataFrame 是其核心数据结构之一,类似于表格或 SQL 表。

pd.json_normalize 函数可以将嵌套的 JSON 数据转换为扁平化的 DataFrame,使得每一层嵌套的数据都成为 DataFrame 中的一列。

优势

  1. 简化数据结构:将复杂的嵌套结构转换为简单的二维表格,便于分析和处理。
  2. 提高可读性:扁平化后的数据更容易理解和查看。
  3. 便于操作:DataFrame 提供了丰富的数据操作和分析功能。

类型

pd.json_normalize 可以处理以下类型的嵌套 JSON 数据:

  • 单层嵌套
  • 多层嵌套
  • 包含数组的嵌套
  • 包含列表的嵌套

应用场景

  • 数据清洗:在数据分析前,将复杂的 JSON 数据清洗成易于分析的格式。
  • API 数据处理:从 RESTful API 获取的数据通常是嵌套的 JSON 格式,使用此函数可以方便地处理这些数据。
  • 日志分析:日志文件中可能包含嵌套的结构,使用此函数可以将日志数据转换为可分析的格式。

示例代码

假设我们有以下嵌套的 JSON 数据:

代码语言:txt
复制
nested_json = {
    "id": 1,
    "name": "John Doe",
    "contact": {
        "email": "john.doe@example.com",
        "phone_numbers": [
            {"type": "home", "number": "123-456-7890"},
            {"type": "work", "number": "098-765-4321"}
        ]
    },
    "orders": [
        {"order_id": 101, "product": "Widget", "quantity": 2},
        {"order_id": 102, "product": "Gadget", "quantity": 1}
    ]
}

使用 pd.json_normalize 可以将其扁平化为 DataFrame:

代码语言:txt
复制
import pandas as pd

# 扁平化嵌套的 JSON 数据
df = pd.json_normalize(nested_json, sep='_')

print(df)

输出结果将是:

代码语言:txt
复制
   id       name contact_email contact_phone_numbers_0_type contact_phone_numbers_0_number contact_phone_numbers_1_type contact_phone_numbers_1_number orders_0_order_id orders_0_product orders_0_quantity orders_1_order_id orders_1_product orders_1_quantity
0   1  John Doe john.doe@example.com                     home                     123-456-7890                     work                     098-765-4321                   101          Widget                  2                   102          Gadget                  1

遇到的问题及解决方法

问题:如果 JSON 数据中的某些键不存在,使用 pd.json_normalize 可能会导致 KeyError。

解决方法:在使用 pd.json_normalize 之前,可以先检查 JSON 数据的结构,确保所有预期的键都存在。或者,可以使用 errors='ignore' 参数来忽略不存在的键:

代码语言:txt
复制
df = pd.json_normalize(nested_json, sep='_', errors='ignore')

这样,即使某些键不存在,也不会引发错误,而是会在结果 DataFrame 中省略这些键对应的列。

通过这种方式,pd.json_normalize 函数可以帮助开发者有效地处理和分析嵌套的 JSON 数据。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

你必须知道的Pandas 解析json数据的函数-json_normalize()

JSON对象列表 采用[]将JSON对象括起来,形成一个JSON对象的列表,JSON对象中同样会有多层{},也会有[]出现,形成嵌套列表 这篇文章主要讲述pandas内置的Json数据转换方法json_normalize...本文的主要解构如下: 解析一个最基本的Json- 解析一个带有多层数据的Json- 解析一个带有嵌套列表的Json- 当Key不存在时如何忽略系统报错- 使用sep参数为嵌套Json的Key设置分隔符...(一个点) |max_level|解析Json对象的最大层级数,适用于有多层嵌套的Json对象 在进行代码演示前先导入相应依赖库,未安装pandas库的请自行安装(此代码在Jupyter Notebook...(json_obj) 输出结果为: 多层key之间使用点隔开,展示了所有的数据,这已经解析了3层,上述写法和pd.json_normalize(json_obj, max_level=3)等价。...-- -->'name': 'Jacqueline'} ], } pd.json_normalize(json_obj) 此例中students键对应的值是一个列表,使用[]括起来。

3K20
  • 你必须知道的Pandas 解析json数据的函数

    JSON对象列表 采用[]将JSON对象括起来,形成一个JSON对象的列表,JSON对象中同样会有多层{},也会有[]出现,形成嵌套列表 这篇文章主要讲述pandas内置的Json数据转换方法json_normalize...本文的主要解构如下: 解析一个最基本的Json- 解析一个带有多层数据的Json- 解析一个带有嵌套列表的Json- 当Key不存在时如何忽略系统报错- 使用sep参数为嵌套Json的Key设置分隔符...(json_obj) 输出结果为: 多层key之间使用点隔开,展示了所有的数据,这已经解析了3层,上述写法和pd.json_normalize(json_obj, max_level=3)等价。...-- -->'name': 'Jacqueline'} ], } pd.json_normalize(json_obj) 此例中students键对应的值是一个列表,使用[]括起来。...使用sep参数为嵌套Json的Key设置分隔符 在2.a的案例中,可以注意到输出结果的具有多层key的数据列标题是采用.对多层key进行分隔的,可以为sep赋值以更改分隔符。

    1.8K20

    Python .get 嵌套 JSON 值

    对于长期使用python写代码的我来说,经常在Python代码中,使用.get方法来访问嵌套在JSON结构中的值。...我们知道JSON(JavaScript Object Notation)是一种常见的数据交换格式,它可以包含嵌套的键值对。但是在我们使用总该如何获取嵌套对象中的值呢?...1、问题背景在 Python 中,可以使用 .get() 方法从 JSON 对象中获取值。当 JSON 对象中嵌套了其他 JSON 对象时,如何获取嵌套对象中的值呢?...例如,以下 JSON 对象中包含了一个名为 "product" 的嵌套对象,该对象又包含了几个子对象。...2、解决方案但是,如果 JSON 对象中的嵌套对象不是直接使用键值对表示,而是使用数组表示,则获取嵌套对象中的值就会变得更加复杂。

    18310

    【Python】json 格式转换 ② ( Json 格式简介 | Json 概念 | Json 功能 | 对象 数组 格式 | 嵌套格式 | Json 特点 )

    , 可以将 Java 数据转为 Json 字符串 , 然后传递给 Python 语言 ; 3、Json 格式 - 对象 / 数组 格式 Json 的 基本格式 主要有 对象 和 数组 两种形式 , Json...对象格式 : Json 对象是在 大括号 中的键值对 , 键 和 值 之间 使用冒号隔开 , 每个 键值对 之间 使用 逗号隔开 ; { "name": "John", "age":...30, "city": "New York" } Json 数组格式 : Json 数组 在 中括号 中存储 , 每个数组元素之间使用逗号隔开 ; [ "apple", "banana...", "orange" ] Json 对象对应着 Python 中的字典 , Json 数组对应着 Python 中的列表 , 上述对应可无缝衔接转换 ; 4、Json 格式 - 对象 /...数组 嵌套格式 Json 对象中的 键 和 值 可以是 对象 或 数组 ; Json 数组中的元素 , 可以是 对象 或 数组 ; 下面的 Json 数据 是一个 Json 对象 , “hobbies”

    37220

    软件测试|数据处理神器pandas教程(五)

    图片前言上一篇文章我们介绍了pandas读写CSV文件的有关方法,本篇文章我们介绍pandas读取JSON文件的方法。pandas同样可以很方便地处理JSON文件。...读取json文件与读取csv文件类似,pandas提供了read_json()方法读取json文件内容,示例如下:import pandas as pddf = pd.read_json('data.json..."GDP": 32772.68 }, { "省份": "江西", "人口": 4517.4, "地区": "华东", "GDP": 32074.7 }]}df = pd.json_normalize...as pdimport jsonwith open('data2.json', encoding='utf-8') as f: data = json.loads(f.read())df = pd.json_normalize...读取json数据的方法,除了直接读取json数据外,还可以读取嵌套的json数据,后续我们将介绍pandas处理Excel数据的方法。

    69630

    python处理json数据(复杂的json转化成嵌套字典并处理)

    一 什么是json json是一种轻量级的数据交换格式。它基于 [ECMAScript]((w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。...我们用浏览器打开json文件往往是一堆字符形式的编码,python处理过后会自动转化为utf8格式 有利于使用。...二 python处理所需要的库 requests json 如果没有安装 requests库可以安装 安装方法在我以前的文章里 三 代码实现 __author__ = 'lee' import...requests import json url = '你需要的json地址' response = requests.get(url) content = response.text json_dict...= json.loads(content) list_key = [] #分类信息 j = 0 for key in json_dict['data']: list_key.append(key

    5.7K81

    使用Python解析JSON

    参考链接: Python-Json 3 : python中验证是否为有效JSON数据 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。...Python3 中可以使用 json 模块来对 JSON 数据进行编解码,主要包含了下面4个操作函数:  提示:所谓类文件对象指那些具有read()或者 write()方法的对象,例如,f = open...在json的编解码过程中,python 的原始类型与JSON类型会相互转换,具体的转化对照如下:  Python 编码为 JSON 类型转换对应表:  PythonJSONdictobjectlist,..., f, ensure_ascii=False, indent=4) # 将类文件对象中的JSON字符串直接转换成 Python 字典 with open('pengjunlee.json', 'r',...print(ret_dic['name']) # 结果 pengjunlee  注意:使用eval()能够实现简单的字符串和Python类型的转化。

    2.6K00

    Python中使用Json

    最近编写python中,需要使用python中的json模块,所以尝试对Json模块做一个简单的了解 什么是json: Json是javaScript 中规定的一种轻量级文件格式,后来在其他语言中也逐渐添加了对...Json的支持,所以python中使用Json只需在开头引入json 库就够了 引入方法: 在代码的前面添加Import json,就可以使用python中的Json库了,Json是python中的基本库...,不需要自己安装 如何使用: 1.如何把读取json格式文件: 例如文件名称是:exampl.json,文件内容是一个字典或者是列表(tuple会出一点问题) 首先获得一个文件的对象 f = file(...‘example.json’) 然后使用json中的load函数将其转化为字典或列表 Dic= json.load(f) 2.如何使用在程序中使用: 一般来说,Json是用来传输中使用的,所以在json...然后 Lis1 = json.dumps(info) 这时候Lis1和Lis 就是完全相同的 说说自己使用Json中遇到的问题,就是一般不能使用元组(tuple),这个可能克python中规定tuple

    81020

    Python 库 Pandas 使用介绍

    Pandas: Comprehensive Guide前言说明Pandas 是一个功能强大的 Python 数据分析和数据处理库,广泛应用于各种数据驱动的领域。...多种数据格式支持:支持 CSV、Excel、SQL、JSON 等多种格式的读写。与其他库集成性强:可以轻松与 NumPy、Matplotlib 等库结合使用。...安装和引用安装步骤Pandas 可以通过 pip 或 conda 安装:# 使用 pip 安装pip install pandas# 使用 conda 安装conda install pandas引用方法在代码中引用...Pandas 通常使用以下方式:import pandas as pd库的使用案例案例 1:数据读取与基本操作import pandas as pd# 读取 CSV 文件data = pd.read_csv...总结Pandas 作为 Python 生态系统中最重要的数据分析工具之一,具有直观、强大的特点。在各种数据驱动的场景中,Pandas 都能显著提升工作效率。

    10810

    在Python如何将 JSON 转换为 Pandas DataFrame?

    在数据处理和分析中,JSON是一种常见的数据格式,而Pandas DataFrame是Python中广泛使用的数据结构。...图片使用 Pandas 读取 JSON 文件在开始之前,让我们了解如何使用Pandas的read_json()函数从JSON文件中读取数据。...解析嵌套 JSON 数据在处理JSON数据时,我们经常会遇到嵌套的JSON结构。为了正确解析和展开嵌套的JSON数据,我们可以使用Pandas的json_normalize()函数。...以下是解析嵌套JSON数据的步骤:导入所需的库:import pandas as pdfrom pandas.io.json import json_normalize使用json_normalize(...)函数解析嵌套的JSON数据:df = json_normalize(data, 'nested_key')在上述代码中,data是包含嵌套JSON数据的Python对象,nested_key是要解析的嵌套键

    1.2K20

    Python Pandas 的使用——Series

    参考链接: 访问Pandas Series的元素 Python Pandas 的使用——Series   Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算)...Pandas 安装  官方推荐的安装方式是通过Anaconda安装,但Anaconda太过庞大,若只是需要Pandas的功能,则可通过PyPi方式安装。  pip install Pandas 2....Pandas 的数据结构——Series  使用pandas前需要先引入pandas,若无特别说明,pd作为Pandas别名的通用写法  import pandas as pd    2.1 Series...的创建  Series定义    Series像是一个Python的dict类型,因为它的索引与元素是映射关系Series也像是一个ndarray类型,因为它也可以通过series_name[index...如果python版本 >= 3.6 并且 Pandas 版本 >= 0.23 , 则通过dict创建的Series索引按照dict的插入顺序排序   如果python版本 Pandas

    95500

    如何使用Python对嵌套结构的JSON进行遍历获取链接并下载文件

    JSON可以形成嵌套结构,即数组或对象中包含其他数组或对象。...遍历JSON就是按顺序访问其中的每个元素或属性,并进行处理。遍历JSON有很多好处: ● 提取所需信息:我们可以从嵌套结构的JSON中获取特定信息,比如Alice喜欢什么书或Bob会不会跳舞等。...● 修改或更新信息:我们可以修改或更新嵌套结构的JSON中的特定信息,比如Alice年龄加1或Charlie多了一个爱好等。...● 格式化或转换信息:我们可以将嵌套结构的JSON以不同形式展示给用户,比如表格、图表、列表等, 或者转换成其他格式,比如XML、CSV等。...下面通过一段代码演示如何遍历JSON,提取所有的网站链接,并对zip文件使用爬虫代理IP下载: # 导入需要的模块 import json import requests # 定义爬虫代理加强版的用户名

    10.8K30
    领券