当前位置: 首页 > 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。 能够读取和…...

第二桌面 + 小龙虾:让企业AI智能体安全落地、全员可用

本文发布于2026年4月1日。引言&#xff1a;从“养虾”到“用虾”&#xff0c;AI落地需要新底座过去几个月&#xff0c;OpenClaw&#xff08;昵称“小龙虾”&#xff09;在开发者圈子里火得一塌糊涂。这个开源AI智能体网关&#xff0c;能听懂人话&#xff0c;还能替你操作电脑、…...

Kandinsky-5.0-I2V-Lite-5s实战:基于Dify平台构建无代码视频生成应用

Kandinsky-5.0-I2V-Lite-5s实战&#xff1a;基于Dify平台构建无代码视频生成应用 1. 引言&#xff1a;让图片动起来的零门槛方案 最近遇到不少朋友在问&#xff1a;有没有什么简单的方法&#xff0c;能让静态图片变成动态视频&#xff1f;传统方案要么需要专业视频编辑技能&a…...

融智学三大基本定律——信息世界的根本法则体系:为跨模态知识处理、人机协同等前沿领域提供原理支撑

融智学三大基本定律——信息世界的根本法则体系摘要&#xff1a;融智学三大基本定律构成信息处理的核心理论体系。第一定律&#xff08;实部序位关系唯一守恒&#xff09;确立本质信息的稳定性&#xff1b;第二定律&#xff08;实部序位同义并列对应转换&#xff09;实现多元表…...

从apt-get到yum:Ubuntu20.04下跨平台包管理工具安装指南

从apt-get到yum&#xff1a;Ubuntu 20.04下跨平台包管理工具实战指南 在Linux生态中&#xff0c;不同发行版采用不同的包管理系统——Debian系的apt与RedHat系的yum就是典型代表。当开发者需要在Ubuntu环境下运行原本为CentOS设计的软件时&#xff0c;掌握yum的安装与配置技巧能…...

告别重复造轮子:用快马AI一键生成嵌入式Modbus协议栈提升效率

作为一名嵌入式开发者&#xff0c;我经常需要为各种项目实现Modbus通信协议。每次从零开始编写协议栈不仅耗时&#xff0c;还容易引入低级错误。最近尝试用InsCode(快马)平台生成基础框架&#xff0c;效率提升明显&#xff0c;分享下具体实践过程。 传统开发痛点分析 在STM32项…...

汽车电子选型:RF430F5144CIRKVRQ1为什么适合发动机舱附近的应用

RF430F5144CIRKVRQ1&#xff1a;这颗77mm的QFN芯片&#xff0c;如何把13.56MHz NFC和MSP430 MCU塞进一颗汽车级SoCRF430F5144CIRKVRQ1来自德州仪器&#xff0c;是一颗高度集成的NFC传感器收发器SoC。它的核心价值很直接&#xff1a;把13.56MHz HF射频前端、16位MSP430超低功耗M…...

PvZ Toolkit:植物大战僵尸PC版终极修改器使用指南

PvZ Toolkit&#xff1a;植物大战僵尸PC版终极修改器使用指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 还在为植物大战僵尸中资源不足而烦恼吗&#xff1f;PvZ Toolkit是一款专为植物大战僵尸…...

PakePlus云打包入门指南:从零到一的GitHub Token配置与安全实践

PakePlus云打包入门指南&#xff1a;从零到一的GitHub Token配置与安全实践 【免费下载链接】PakePlus Turn any webpage/HTML/Vue/React and so on into desktop and mobile app under 5M with easy in few minutes. 轻松将任意网站/HTML/Vue/React等项目构建为轻量级(小于5M)…...

霜儿-汉服-造相Z-Turbo作品集:看看AI能生成多美的汉服少女图

霜儿-汉服-造相Z-Turbo作品集&#xff1a;看看AI能生成多美的汉服少女图 1. 惊艳开篇&#xff1a;AI汉服艺术的魅力 当传统汉服遇上现代AI技术&#xff0c;会碰撞出怎样的火花&#xff1f;霜儿-汉服-造相Z-Turbo给出了令人惊叹的答案。这个基于Xinference部署的文生图模型服务…...

Omni-Vision Sanctuary 网络协议分析辅助:可视化网络数据包与流量模式识别

Omni-Vision Sanctuary 网络协议分析辅助&#xff1a;可视化网络数据包与流量模式识别 1. 网络数据可视化的新思路 网络工程师每天面对海量的数据包和流量日志&#xff0c;传统的分析工具往往需要依赖复杂的命令行操作和专业图表解读。而Omni-Vision Sanctuary模型为我们提供…...