当前位置: 首页 > news >正文

pandas处理json的相关操作

Pandas 是一个强大的数据处理库,它提供了丰富的功能来处理 JSON 数据。以下是 Pandas 中处理 JSON 的所有常见操作:


1. 读取 JSON 文件

使用 pandas.read_json() 函数可以从 JSON 文件或 JSON 字符串中读取数据。

从 JSON 文件读取
import pandas as pd# 从 JSON 文件读取
df = pd.read_json('data.json')
print(df)
从 JSON 字符串读取
json_data = '''
[{"name": "Alice", "age": 30},{"name": "Bob", "age": 25}
]
'''df = pd.read_json(json_data)
print(df)

2. 将 DataFrame 保存为 JSON 文件

使用 DataFrame.to_json() 方法可以将 DataFrame 保存为 JSON 文件或 JSON 字符串。

保存为 JSON 文件
df = pd.DataFrame({'name': ['Alice', 'Bob'],'age': [30, 25]
})df.to_json('output.json', orient='records', lines=True)
保存为 JSON 字符串
json_string = df.to_json(orient='records')
print(json_string)

3. JSON 数据的方向(orient 参数)

Pandas 支持多种 JSON 数据的方向(orient 参数),用于控制 JSON 数据的结构。

常见 orient 选项:
  • 'split':字典格式,包含 indexcolumnsdata
  • 'records':列表格式,每行是一个字典。
  • 'index':字典格式,键是行索引。
  • 'columns':字典格式,键是列名。
  • 'values':仅包含数据值的二维列表。
示例
df = pd.DataFrame({'name': ['Alice', 'Bob'],'age': [30, 25]
})# 使用不同的 orient 参数
print(df.to_json(orient='split'))
print(df.to_json(orient='records'))
print(df.to_json(orient='index'))
print(df.to_json(orient='columns'))
print(df.to_json(orient='values'))

4. 处理嵌套 JSON 数据

如果 JSON 数据是嵌套的(例如包含字典或列表),可以使用 json_normalize() 函数将其展平。

示例
import pandas as pd
from pandas import json_normalizenested_json = [{"name": "Alice","age": 30,"address": {"city": "New York","zip": "10001"}},{"name": "Bob","age": 25,"address": {"city": "Los Angeles","zip": "90001"}}
]# 展平嵌套 JSON
df = json_normalize(nested_json)
print(df)

输出:

    name  age       address.city address.zip
0  Alice   30          New York       10001
1    Bob   25      Los Angeles       90001

5. 处理 JSON 中的列表数据

如果 JSON 数据中包含列表,可以使用 explode() 方法将列表拆分为多行。

示例
df = pd.DataFrame({'name': ['Alice', 'Bob'],'courses': [['Math', 'Science'], ['History', 'English']]
})# 将列表拆分为多行
df = df.explode('courses')
print(df)

输出:

    name   courses
0  Alice      Math
0  Alice   Science
1    Bob   History
1    Bob   English

6. 从 API 获取 JSON 数据

Pandas 可以直接从 API 获取 JSON 数据并转换为 DataFrame。

示例
import pandas as pd
import requests# 从 API 获取数据
url = 'https://api.example.com/data'
response = requests.get(url)
data = response.json()# 转换为 DataFrame
df = pd.DataFrame(data)
print(df)

7. 处理 JSON 中的日期

如果 JSON 数据中包含日期字符串,可以使用 pd.to_datetime() 将其转换为日期类型。

示例
df = pd.DataFrame({'date': ['2023-01-01', '2023-02-01'],'value': [10, 20]
})# 将日期字符串转换为日期类型
df['date'] = pd.to_datetime(df['date'])
print(df)

8. 处理 JSON 中的缺失值

Pandas 会自动将 JSON 中的 null 转换为 NaN,可以使用 fillna()dropna() 处理缺失值。

示例
df = pd.DataFrame({'name': ['Alice', 'Bob', None],'age': [30, None, 25]
})# 填充缺失值
df_filled = df.fillna('Unknown')
print(df_filled)# 删除包含缺失值的行
df_dropped = df.dropna()
print(df_dropped)

9. 处理 JSON 中的多层索引

如果 JSON 数据包含多层索引(例如嵌套字典),可以使用 pd.MultiIndex 处理。

示例
data = {('Alice', 'age'): 30,('Alice', 'city'): 'New York',('Bob', 'age'): 25,('Bob', 'city'): 'Los Angeles'
}df = pd.DataFrame(data, index=[0])
print(df)

10. 处理 JSON 中的复杂结构

如果 JSON 数据结构非常复杂,可以结合 Python 的 json 模块和 Pandas 进行处理。

示例
import json
import pandas as pdcomplex_json = '''
{"employees": [{"name": "Alice", "age": 30, "skills": ["Python", "SQL"]},{"name": "Bob", "age": 25, "skills": ["Java", "C++"]}]
}
'''# 解析 JSON
data = json.loads(complex_json)# 提取嵌套数据
employees = data['employees']
df = pd.DataFrame(employees)# 展平嵌套列表
df = df.explode('skills')
print(df)

11. 处理 JSON 中的大文件

对于大型 JSON 文件,可以使用 chunksize 参数分块读取。

示例
chunks = pd.read_json('large_data.json', lines=True, chunksize=1000)
for chunk in chunks:print(chunk)

12. 处理 JSON 中的非标准格式

如果 JSON 数据是非标准格式(例如每行一个 JSON 对象),可以使用 lines=True 参数。

示例
json_data = '''
{"name": "Alice", "age": 30}
{"name": "Bob", "age": 25}
'''df = pd.read_json(json_data, lines=True)
print(df)

13. 处理 JSON 中的 Unicode 字符

Pandas 默认支持 Unicode 字符,无需额外处理。

示例
df = pd.DataFrame({'name': ['张三', '李四'],'age': [30, 25]
})json_string = df.to_json(orient='records', force_ascii=False)
print(json_string)

14. 处理 JSON 中的时间序列

如果 JSON 数据中包含时间序列,可以使用 pd.date_range()pd.to_datetime() 处理。

示例
df = pd.DataFrame({'date': ['2023-01-01', '2023-01-02'],'value': [10, 20]
})df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
print(df)

15. 处理 JSON 中的多表数据

如果 JSON 数据包含多个表,可以分别读取并合并。

示例
data = {"table1": [{"name": "Alice", "age": 30}],"table2": [{"name": "Bob", "age": 25}]
}df1 = pd.DataFrame(data['table1'])
df2 = pd.DataFrame(data['table2'])# 合并两个表
df = pd.concat([df1, df2], ignore_index=True)
print(df)

总结

Pandas 提供了强大的工具来处理 JSON 数据,包括读取、写入、展平嵌套结构、处理缺失值等。通过灵活使用这些功能,可以轻松地将 JSON 数据转换为 DataFrame 并进行进一步的分析和处理。

相关文章:

pandas处理json的相关操作

Pandas 是一个强大的数据处理库,它提供了丰富的功能来处理 JSON 数据。以下是 Pandas 中处理 JSON 的所有常见操作: 1. 读取 JSON 文件 使用 pandas.read_json() 函数可以从 JSON 文件或 JSON 字符串中读取数据。 从 JSON 文件读取 import pandas as …...

linux内存泄露定位过程(kmemleak和slab debug)

1,当遇到内存增加过多时,或者由于内存导致系统oom时我们怎么定位呢,定位时需要确认是内核态还是用户态内存泄露。 排查步骤 top查看VIRT和RES内存 rootubuntu2004:~# top top - 21:05:39 up 7 min, 1 user, load average: 5.01, 4.09, 2.…...

2025年安卓面试复习总结

文章目录 深入理解并熟练运用常用设计模式及反射原理,能够自定义注解及泛型,多次通过设计模式对 app 代码进行高效重构,显著提升代码的可维护性与扩展性。设计模式自定义注解泛型Kotlin泛型 精通多线程原理,对 ThreadPoolExecutor…...

JS scrollIntoView 技巧揭秘:解锁网页流畅交互

文章目录 一.基本概念二.语法和参数基本语法:element.scrollIntoView();参数详解: 三.应用场景和示例场景一:点击目录点位到相应的位置React 示例代码:Vue3 示例代码: 场景二:轮播图定位到指定图片示例代码…...

【Ubuntu 24.04】常见问题解决

1.24开启3D加速黑屏 参考文章:Ubuntu24开机黑屏,VMware卡死,虚拟机繁忙解决方案 没有3D加速就没有动画,所以我们需要开启3D加速,但是直接开启3D加速会黑屏 由于Ubuntu24内部的图形加速驱动异常,因此需要更新…...

前端依赖安装指南

前端依赖安装指南 一、NVM管理工具安装 1.在 Windows 上安装 下载 NVM for Windows 的安装程序:(最新版本可以在 nvm-windows Releases 页面 找到)运行下载的安装程序并按步骤操作。 2.配置 NVM exe安装自动配置环境变量 3. 验证 NVM 安装 验证 NVM 是否成功…...

灌区闸门自动化控制系统-精准渠道量测水-灌区现代化建设

项目背景 本项目聚焦于黑龙江某一灌区的现代化改造工程,该灌区覆盖广阔,灌溉面积高达7.5万亩,地域上跨越6个乡镇及涵盖17个村庄。项目核心在于通过全面的信息化建设,强力推动节水灌溉措施的实施,旨在显著提升农业用水的…...

ELK实战(最详细)

一、什么是ELK ELK是三个产品的简称:ElasticSearch(简称ES) 、Logstash 、Kibana 。其中: ElasticSearch:是一个开源分布式搜索引擎Logstash :是一个数据收集引擎,支持日志搜集、分析、过滤,支持大量数据…...

《大型语言模型与强化学习的融合:探索问题的新解决方案与开源验证需求》

强化学习在2020年代初期通过开源项目如CleanRL的多学习者PPO算法取得了显著进展,但在语言模型领域未能充分利用其潜力 1. 开源项目CleanRL的贡献 CleanRL 是一个致力于提供简单、高效且易于理解的强化学习(RL)算法实现的开源项目。该项目通…...

springboot 默认的 mysql 驱动版本

本案例以 springboot 3.1.12 版本为例 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.12</version><relativePath/> </parent> 点击 spring-…...

10分钟快速了解OceanGPT(沧渊)

10分钟快速了解OceanGPT(沧渊) 海洋科学任务的大语言模型——OceanGPT OceanGPT是如何训练的?为了训练 OceanGPT (沧渊) ,收集了一个跨越多个领域的海洋科学语料库。由于每个子领域和主题都有其独特的数据特征和模式,因此提出了一个特定于领域的指令生成框架,称为 DoDirec…...

蓝桥杯嵌入式速通(1)

1.工程准备 创建一文件夹存放自己的代码&#xff0c;并在mdk中include上文件夹地址 把所有自身代码的头文件都放在headfile头文件中&#xff0c;之后只需要在新的文件中引用headfile即可 headfile中先提前可加入 #include "stdio.h" #include "string.h"…...

Redis优化建议详解

Redis优化建议详解 1. 内存优化 1.1 内存配置 设置最大内存 maxmemory 4gb 内存淘汰策略 maxmemory-policy allkeys-lru 样本数量 maxmemory-samples 51.2 内存优化策略 数据结构优化 使用压缩列表&#xff08;ziplist&#xff09;合理设置hash-max-ziplist-entries使用整数…...

ceph 存储 full 阈值调整

前言 在 Ceph 集群中,默认情况下,当某些 OSD(对象存储守护进程)的使用率达到 85% 时,系统会发出 nearfull 警告,并可能限制进一步的写入操作,以防止数据丢失或集群不稳定。 要允许在 OSD 使用率超过 85% 的情况下继续写入,您可以调整以下两个参数: mon_osd_nearful…...

后端技术选型 sa-token校验学习 下 结合项目学习 后端鉴权

目录 后端注册拦截器 实现对 WebMvcConfigurer 接口的类实现 静态变量 方法重写 注册 Spring Framework拦截器 Sa-Token中SaServletFilter拦截器 思考 为什么使用两个拦截器 1. Spring Framework 拦截器 2. SaServletFilter 为什么要注册两个拦截器&#xff1f; 总结 …...

Vue.js组件开发-实现组件切换效果的两种方法 条件渲染、动态组件

在Vue.js中&#xff0c;实现组件切换效果通常依赖于条件渲染或动态组件。 方法一&#xff1a;条件渲染 条件渲染使用v-if、v-else-if和v-else指令来根据条件展示或隐藏组件。这种方法适用于需要在不同条件下展示不同组件的场景。 <template><div><button cli…...

primitive 的 Appearance编写着色器材质

import { nextTick, onMounted, ref } from vue import * as Cesium from cesium import gsap from gsaponMounted(() > { ... })// 1、创建矩形几何体&#xff0c;Cesium.RectangleGeometry&#xff1a;几何体&#xff0c;Rectangle&#xff1a;矩形 let rectGeometry new…...

Seata搭建

1.初识Seata Quick Start | Apache Seata 官网 2.准备nacos和 seata 启动nacos startup.cmd -m standalone账号nacos 密码nacos 搭建seata TC 这里下载的 1.4.2 seata-server-1.4.2 1.修改seata配置文件 registry.conf 这里我们使用nacos作为注册中心 和 配置中心 r…...

流浪猫流浪狗领养PHP网站源码

源码介绍 流浪猫流浪狗领养PHP网站源码&#xff0c;适合做猫狗宠物类的发信息发布。当然其他信息发布也是可以的。 导入数据库&#xff0c;修改数据库配置/application/database.php 设置TP伪静态&#xff0c;设置运行目录&#xff0c; 后台&#xff1a;/abcd.php/dashboard?…...

asammdf python 处理MF4文件库简介

asammdf 是一个功能强大的 Python 库&#xff0c;专门用于处理汽车行业常用的 MDF&#xff08;Measured Data Format&#xff09;文件。以下是 asammdf 的主要功能总结&#xff1a; 主要功能 读取和写入 MDF 文件&#xff1a; 支持 MDF 文件的版本 3.x 和 4.x。 能够读取和…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...