当前位置:首页 > 文章列表 > 文章 > python教程 > Pandasjson_normalize使用方法详解

Pandasjson_normalize使用方法详解

2025-10-26 22:21:36 0浏览 收藏

还在为处理复杂JSON数据烦恼吗?本文将深入讲解 Pandas 库中强大的 `json_normalize` 函数,助你轻松应对包含嵌套列表的 JSON 文件。通过本文,你将学会如何利用 `json_normalize` 将 JSON 数据转化为易于分析的表格形式,并掌握针对不同嵌套层级的展平技巧。我们将详细演示如何设置 `record_path` 和 `meta` 参数,以及如何使用 `pd.merge` 函数合并展平后的数据,最终生成一个完整的 DataFrame。无论你是数据分析新手还是经验丰富的开发者,都能从本文中受益,提升 JSON 数据处理效率,让数据分析工作事半功倍。立即学习 Pandas `json_normalize` 用法,解锁数据分析新技能!

使用 Pandas json_normalize 展平嵌套 JSON 数据

本文旨在指导读者如何使用 Pandas 库中的 `json_normalize` 函数处理包含嵌套列表的 JSON 文件,将其转换为易于分析的表格数据。我们将详细介绍如何针对不同的嵌套层级进行展平操作,并演示如何将展平后的数据合并成一个完整的 DataFrame。通过本文的学习,读者将能够有效地处理复杂的 JSON 数据,并将其应用于实际的数据分析任务中。

准备工作

首先,确保你已经安装了 Pandas 库。如果没有安装,可以使用 pip 进行安装:

pip install pandas

加载 JSON 数据

假设我们有一个名为 data.json 的 JSON 文件,内容如下:

[{
  "uuid": "a2d89c9b-6e2e-4e3a-8d60-bf3ce2fe3fda",
  "timestamp": "2023-11-23 00:26:31.851000 UTC",
  "process_timestamp": "2023-11-23 00:26:32.326000 UTC",
  "visitor_id": "oeu1700282566730r0.9025758502018271",
  "session_id": "AUTO",
  "account_id": "25408250069",
  "experiments": {
    "list": [{
      "element": {
        "campaign_id": "26314710187",
        "experiment_id": "26322360336",
        "variation_id": "26314800349",
        "is_holdback": "false"
      }
    }]
  },
  "entity_id": "25754820685",
  "attributes": {
    "list": [{
      "element": {
        "id": null,
        "name": "",
        "type": "browserId",
        "value": "gc"
      }
    }, {
      "element": {
        "id": null,
        "name": "",
        "type": "campaign",
        "value": "blablabla"
      }
    }, {
      "element": {
        "id": null,
        "name": "",
        "type": "device",
        "value": "desktop"
      }
    }, {
      "element": {
        "id": null,
        "name": "",
        "type": "device_type",
        "value": "desktop_laptop"
      }
    }, {
      "element": {
        "id": null,
        "name": "",
        "type": "referrer",
        "value": "https://bookings.perrito.com/21df6542"
      }
    }, {
      "element": {
        "id": null,
        "name": "",
        "type": "source_type",
        "value": "campaign"
      }
    }, {
      "element": {
        "id": null,
        "name": "",
        "type": "currentTimestamp",
        "value": "1700699073915"
      }
    }, {
      "element": {
        "id": null,
        "name": "",
        "type": "offset",
        "value": "300"
      }
    }]
  },
  "user_ip": "72.38.10.0",
  "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
  "referer": "https://bookings.perrito.com/",
  "event_type": "other",
  "event_name": "transaction",
  "revenue": "240939",
  "value": null,
  "quantity": null,
  "tags": {
    "key_value": [{
      "key": "tour_id",
      "value": "386"
    }, {
      "key": "booking_id",
      "value": "123456"
    }, {
      "key": "payment_type",
      "value": "creditcard"
    }, {
      "key": "revenue",
      "value": "240939"
    }, {
      "key": "pax",
      "value": "1"
    }, {
      "key": "tour_name",
      "value": "Best Viaje ever"
    }, {
      "key": "extras",
      "value": "245.00"
    }]
  },
  "revision": "859",
  "client_engine": "js",
  "client_version": "0.188.1",
  "element": {
    "campaign_id": "26314710187",
    "experiment_id": "26322360336",
    "variation_id": "26314800349",
    "is_holdback": "false"
  }
}]

使用以下代码加载 JSON 数据:

import json
import pandas as pd

with open("data.json", "r") as f:
    data = json.load(f)

使用 json_normalize 展平数据

json_normalize 函数可以将 JSON 数据展平为表格形式。对于包含嵌套列表的 JSON,我们需要指定 record_path 参数来告诉函数需要展平的列表路径。

首先,定义一些顶层字段作为元数据,这些字段将作为索引字段保留在展平后的数据中:

meta = [
    "uuid",
    "timestamp",
    "process_timestamp",
    "visitor_id",
    "session_id",
    "account_id",
    "entity_id",
    "user_ip",
    "user_agent",
    "referer",
    "event_type",
    "event_name",
    "revenue",
    "value",
    "quantity",
    "revision",
    "client_engine",
    "client_version",
]

接下来,针对 experiments.list、attributes.list 和 tags.key_value 这三个嵌套列表分别进行展平:

experiments_list = pd.json_normalize(
    data=data,
    record_path=["experiments", "list"],
    meta=meta,
    record_prefix="experiments.list.",
)

attributes_list = pd.json_normalize(
    data=data,
    record_path=["attributes", "list"],
    meta=meta,
    record_prefix="attributes.list.",
)

tags_key_value = pd.json_normalize(
    data=data,
    record_path=["tags", "key_value"],
    meta=meta,
    record_prefix="tags.key_value.",
)

在上述代码中,record_path 参数指定了需要展平的列表路径,meta 参数指定了需要保留的元数据字段,record_prefix 参数用于为展平后的字段添加前缀,避免命名冲突。

合并展平后的数据

展平后的数据分别存储在 experiments_list、attributes_list 和 tags_key_value 三个 DataFrame 中。为了将这些数据合并成一个完整的 DataFrame,可以使用 pd.merge 函数:

out = (
    pd.merge(left=experiments_list, right=attributes_list, on=meta)
    .merge(right=tags_key_value, on=meta)
)

pd.merge 函数根据指定的元数据字段将 DataFrame 进行合并。注意,由于每个嵌套列表的长度可能不同,合并后的 DataFrame 可能会出现重复的行。

示例代码

以下是完整的示例代码:

import json
import pandas as pd

with open("data.json", "r") as f:
    data = json.load(f)

meta = [
    "uuid",
    "timestamp",
    "process_timestamp",
    "visitor_id",
    "session_id",
    "account_id",
    "entity_id",
    "user_ip",
    "user_agent",
    "referer",
    "event_type",
    "event_name",
    "revenue",
    "value",
    "quantity",
    "revision",
    "client_engine",
    "client_version",
]

experiments_list = pd.json_normalize(
    data=data,
    record_path=["experiments", "list"],
    meta=meta,
    record_prefix="experiments.list.",
)

attributes_list = pd.json_normalize(
    data=data,
    record_path=["attributes", "list"],
    meta=meta,
    record_prefix="attributes.list.",
)

tags_key_value = pd.json_normalize(
    data=data,
    record_path=["tags", "key_value"],
    meta=meta,
    record_prefix="tags.key_value.",
)

out = (
    pd.merge(left=experiments_list, right=attributes_list, on=meta)
    .merge(right=tags_key_value, on=meta)
)

print(out)

注意事项

  • 在使用 json_normalize 函数时,需要仔细分析 JSON 数据的结构,确定正确的 record_path 和 meta 参数。
  • 如果 JSON 数据中包含多个嵌套层级,可能需要多次调用 json_normalize 函数进行展平。
  • 合并展平后的数据时,需要注意数据重复的问题,可以根据实际需求进行去重或聚合操作。

总结

本文介绍了如何使用 Pandas 库中的 json_normalize 函数处理包含嵌套列表的 JSON 文件。通过指定 record_path 和 meta 参数,我们可以将 JSON 数据展平为表格形式,并使用 pd.merge 函数将展平后的数据合并成一个完整的 DataFrame。掌握这些技巧可以帮助我们更有效地处理复杂的 JSON 数据,并将其应用于实际的数据分析任务中。

到这里,我们也就讲完了《Pandasjson_normalize使用方法详解》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

Win10内存读取失败解决方法Win10内存读取失败解决方法
上一篇
Win10内存读取失败解决方法
Excel日期格式替换方法|批量标准化时间数据技巧
下一篇
Excel日期格式替换方法|批量标准化时间数据技巧
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • ChatExcel酷表:告别Excel难题,北大团队AI助手助您轻松处理数据
    ChatExcel酷表
    ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
    3179次使用
  • Any绘本:开源免费AI绘本创作工具深度解析
    Any绘本
    探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
    3390次使用
  • 可赞AI:AI驱动办公可视化智能工具,一键高效生成文档图表脑图
    可赞AI
    可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
    3418次使用
  • 星月写作:AI网文创作神器,助力爆款小说速成
    星月写作
    星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
    4525次使用
  • MagicLight.ai:叙事驱动AI动画视频创作平台 | 高效生成专业级故事动画
    MagicLight
    MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
    3798次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码