Pandas处理和分析嵌套JSON数据:六种方法的深入解析与比较

news2024/12/27 6:49:33

在数据分析领域,处理和分析嵌套JSON数据是一项常见且重要的任务。本文将详细介绍六种不同的方法,用于将嵌套JSON字符串转换为结构化的Pandas DataFrame,并进行比较分析。我们将从数据初始化开始,逐步介绍每种方法的实现过程、结果展示、方法解析、优缺点以及参考文献。

数据初始化与预览

首先,我们创建一个包含订单编号和报告数据的DataFrame。报告数据是JSON编码的字符串列表,每个字符串代表一个字典,字典中包含车辆交易价格的属性和变化范围。

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'order_no': [1, 2],
    'repot': [
        '[{"车商收车价": "1.95->2.03"}, {"车商批发价": "1.99->2.07"}]',
        '[{"车商零售价": "2.40->2.48"}, {"个人间交易价": "2.21->2.29"}]'
    ]
})

print("初始化数据预览:")
print(df)

原始数据

order_norepot
1[{“车商收车价”: “1.95->2.03”}, {“车商批发价”: “1.99->2.07”}]
2[{“车商零售价”: “2.40->2.48”}, {“个人间交易价”: “2.21->2.29”}]

期望结果

order_no车商收车价车商批发价车商零售价个人间交易价
11.95->2.031.99->2.07
22.40->2.482.21->2.29

方法1:使用json_normalizeexplode

实现过程

import ast

# 解析JSON字符串并展开
df['repot'] = df['repot'].apply(ast.literal_eval)
normalized = pd.json_normalize(df['repot'].explode())
df_expanded_method1 = pd.concat([df.drop('repot', axis=1), normalized], axis=1)

结果展示

print("方法1结果:")
print(df_expanded_method1)

方法2:使用applypd.Series

实现过程

df['repot'] = df['repot'].apply(ast.literal_eval)
df_expanded_method2 = df.explode('repot')
df_expanded_method2 = df_expanded_method2.apply(lambda row: pd.Series({**{'order_no': row['order_no']}, **row['repot']}), axis=1).reset_index(drop=True)

结果展示

print("方法2结果:")
print(df_expanded_method2)

方法3:使用itertuples和循环

实现过程

expanded_data_method3 = []

for row in df.itertuples(index=False):
    for item in ast.literal_eval(row.repot):
        expanded_data_method3.append({**{'order_no': row.order_no}, **item})

df_expanded_method3 = pd.DataFrame(expanded_data_method3)

结果展示

print("方法3结果:")
print(df_expanded_method3)

方法4:使用concat和列表推导式

实现过程

rows_method4 = []
for index, row in df.iterrows():
    for item in ast.literal_eval(row.repot):
        rows_method4.append({**{'order_no': row['order_no']}, **item})

df_expanded_method4 = pd.DataFrame(rows_method4)

结果展示

print("方法4结果:")
print(df_expanded_method4)

方法5:使用apply和字典展开

实现过程

df['repot'] = df['repot'].apply(ast.literal_eval)
expanded_data_method5 = []

for index, row in df.iterrows():
    for item in row['repot']:
        new_row = {'order_no': row['order_no'], **item}
        expanded_data_method5.append(new_row)

df_expanded_method5 = pd.DataFrame(expanded_data_method5)

结果展示

print("方法5结果:")
print(df_expanded_method5)

方法6:使用concat和独立的DataFrame

实现过程


df['repot'] = df['repot'].apply(ast.literal_eval)
results_method6 = []

for index, row in df.iterrows():
    for item in row['repot']:
        temp_df = pd.DataFrame([item], index=[index])
        temp_df['order_no'] = row['order_no']
        results_method6.append(temp_df)

df_expanded_method6 = pd.concat(results_method6, ignore_index=True)

结果展示

print("方法6结果:")
print(df_expanded_method6)

优缺点比较

方法1:json_normalizeexplode

  • 优点:代码简洁,易于理解和维护;性能较好,特别是在处理大型数据集时。
  • 缺点:需要确保数据格式正确,否则可能会抛出异常。

方法2:applypd.Series

  • 优点:灵活,可以处理更复杂的数据结构。
  • 缺点:性能可能不如方法1,特别是在数据集较大时。

方法3:itertuples和循环

  • 优点:适用于较小的数据集,易于调试和理解。
  • 缺点:性能较差,特别是在处理大型数据集时。

方法4:concat和列表推导式

  • 优点:代码简洁,易于理解。
  • 缺点:可能不如方法1和方法2灵活。

方法5:apply和字典展开

  • 优点:灵活,可以处理更复杂的数据结构。
  • 缺点:性能可能不如方法1,特别是在数据集较大时。

方法6:concat和独立的DataFrame

  • 优点:适用于需要对每个字典项
    进行单独处理的场景。
  • 缺点:代码复杂度较高,性能可能不如方法1。

参考文献

  1. Pandas官方文档:Pandas Documentation
  2. JSON解析与处理:JSON.org
  3. Python官方文档:Python Documentation
  4. Stack Overflow:Stack Overflow
  5. W3Schools在线教程:W3Schools

通过本文的详细介绍和比较,您可以根据自己的需求和数据特点选择合适的方法来处理和分析嵌套JSON数据。希望这些方法能够帮助您更有效地进行数据分析工作。如果您有任何问题或需要进一步的帮助,请随时联系我们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2254126.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

帝可得-策略管理

策略管理 需求说明 策略管理主要涉及到二个功能模块,业务流程如下: 新增策略: 允许管理员定义新的策略,包括策略的具体内容和参数(如折扣率)策略分配: 将策略分配给一个或多个售货机。 #mermaid-svg-PSQOJMLJqVGn3W…

【数据结构】手搓链表

一、定义 typedef struct node_s {int _data;struct node_s *_next; } node_t;typedef struct list_s {node_t *_head;node_t *_tail; } list_t;节点结构体(node_s): int _data;存储节点中的数据struct node_s *_next;:指向 node…

嵌入式 C 编程必备(7):const 关键字 —— 打造稳定的常量空间

目录 一、const关键字的基本含义与用法 1.1. 修饰基本数据类型 1.2. 修饰指针 1.3. 修饰数组 1.4. 修饰结构体 二、const关键字在嵌入式编程中的优势 2.1. 提升代码可读性 2.2. 增强代码安全性 2.3. 优化内存使用 2.4. 促进模块化设计 2.5. 支持静态分析和测试 三、…

Day28 买卖股票的最佳时机 跳跃游戏 跳跃游戏 II K 次取反后最大化的数组和

贪心算法 part02 122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 求最大利润 将每天的正利润加和 public int maxProfit(int[] prices) {int totalPrices 0;for(int i0;i<prices.length;i){if(i<prices.length-1&&prices[i1]>prices[…

【专题】计算机网络之运输层(传输层)

1. 运输层协议概述 1.1 进程之间的通信 (1) 运输层的作用 运输层提供进程间的逻辑通信。 运输层的屏蔽作用&#xff1a; 运输层向高层用户屏蔽了下面网络核心的细节&#xff08;如网络拓扑、所采用的路由选择协议等&#xff09;&#xff0c;使应用进程看见的就是好像在两个运…

Ansible 运维工具

安装 apt install ansible /etc/ansible/hosts , 指定密码或密钥访问分组机器 [k8s_masters] master0.c0.k8s.sb[k8s_nodes] node0.c0.k8s.sb node1.c0.k8s.sb[k8s:children] k8s_masters k8s_nodes[k8s_masters:vars] ansible_ssh_usersbadmin ansible_ssh_pass"***&q…

matlab 中的 bug

在matlab中绘图&#xff0c;设置 axe 的背景颜色 axes_in3.Color #00235B ;打印的时候 print(figure_handle1,-dpng,-r300,"merge_yt_ey") ;此时保存的图片无法识别背景颜色 原因在于 matlab 中的 InverseHardcopy 将 InvertHardcopy 设置成 off 则可以解决这个问…

利用Python爬虫快速获取淘宝/天猫SKU详细信息数据

引言 在当今的电商环境中&#xff0c;获取商品的详细信息对于市场分析和竞争策略至关重要。阿里作为中国最大的电商平台&#xff0c;拥有海量的商品数据。本文将介绍如何利用Python编写爬虫程序&#xff0c;快速获取商品的SKU详细信息数据&#xff0c;并提供相应的代码示例。 …

R语言机器学习论文(二):数据准备

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据一、数据描述二、数据预处理(一)修改元素名称(二)剔除无关变量(三)缺失值检查(四)重复值检查(五)异常值检查三、描述性统计(一)连续变量数据情…

基于图像变化检测的毁伤效果评估——学习笔记

前言 闲的无聊&#xff0c;看看论文。 基本评估步骤 第一步&#xff1a;图像预处理。通过图像配准、不同波段提取、图像校正、图像滤波等手段&#xff0c;统一图像格式&#xff08;文中统一为灰度图&#xff09;&#xff0c;得到待检测图像&#xff1b; 第二步&#xff1a;…

A1228 php+Mysql旅游供需平台的设计与实现 导游接单 旅游订单 旅游分享网站 thinkphp框架 源码 配置 文档 全套资料

旅游供需平台 1.项目描述2. 开发背景与意义3.项目功能4.界面展示5.源码获取 1.项目描述 随着社会经济的快速发展&#xff0c;生活水平的提高&#xff0c;人们对旅游的需求日益增强&#xff0c;因此&#xff0c;为给用户提供一个便利的查看导游信息&#xff0c;进行导游招募的平…

青海摇摇了3天,技术退步明显.......

最近快手上的青海摇招聘活动非常火热&#xff0c;我已经在思考是否备战张诗尧的秋招活动。开个玩笑正片开始&#xff1a; 先说一下自己的情况&#xff0c;大专生&#xff0c;20年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c…

工业—使用Flink处理Kafka中的数据_ProduceRecord2

使用 Flink 消费 Kafka 中 ProduceRecord 主题的数据,统计在已经检验的产品中,各设备每 5 分钟 生产产品总数,将结果存入HBase 中的 gyflinkresult:Produce5minAgg 表, rowkey“

Python爬虫——猫眼电影

用python中requests库爬取猫眼电影信息并保存到csv文件中 猫眼专业版 爬取界面 效果预览 代码 import requests import jsonurl1https://piaofang.maoyan.com/dashboard-ajax?orderType0&uuid1938bd58ddac8-02c2bbe3b009ed-4c657b58-144000-1938bd58ddac8&timeStamp…

ArcGIS求取多个点距离线要素的最近距离以及距离倒数

本文介绍在ArcMap软件中&#xff0c;对于点要素中的每一个点&#xff0c;求取其距离最近的道路的距离、距离倒数的方法。 首先&#xff0c;看一下本文的需求。现在已知一个点要素&#xff0c;其中含有多个点&#xff0c;假设每一个点表示城市中的一家商店&#xff1b;同时&…

SpringBoot开发——Spring Boot3.4 强大的结构化日志记录

文章目录 1. 简介2. 实战案例2.1 环境依赖2.2 快速入门2.3 输出到文件2.4 添加附加字段2.5 自定义日志格式总结1. 简介 日志记录是应用故障排除中早已确立的部分,也是可观测性的三大支柱之一,另外两个是指标和追踪。在生产环境中,没有人喜欢盲目行事,而当故障发生时,开发…

多级IIR滤波效果(BIQUAD),system verilog验证

MATLAB生成IIR系数 采用率1k&#xff0c;截止频率30hz&#xff0c;Matlab生成6阶对应的biquad3级系数 Verilog测试代码 // fs1khz,fc30hz initial beginreal Sig_Orig, Noise_white, Mix_sig;real fs 1000;Int T 1; //周期int N T*fs; //1s的采样点数// 数组声明…

MySQL索引(三):选错索引

优化器选择索引的目的&#xff0c;是找到一个最优的执行方案&#xff0c;并用最小的代价去执行语句。 思考 假设有表结构&#xff1a; -- T表结构&#xff1a; CREATE TABLE t (id int(11) NOT NULL,a int(11) DEFAULT NULL,b int(11) DEFAULT NULL,PRIMARY KEY (id),KEY a (…

区块链学习笔记(2)--区块链的交易模型part1

模型基础 区块链的tx分为两种模型&#xff0c;分别是比特币为代表的UTXO&#xff08;Unspent Transaction Output&#xff09;模型&#xff0c;和以太坊为代表的Account模型。前者适用于货币记账&#xff0c;后者适用于链上应用。 UTXO模型 类似于现金的交易模型 一个tx包含…

Redis 基础、Redis 应用

Redis 基础 什么是 Redis&#xff1f; Redis &#xff08;REmote DIctionary Server&#xff09;是一个基于 C 语言开发的开源 NoSQL 数据库&#xff08;BSD 许可&#xff09;。与传统数据库不同的是&#xff0c;Redis 的数据是保存在内存中的&#xff08;内存数据库&#xf…