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

【“软件工程”基础概念学习】

基础和相关概念 英文&#xff1a;Software Engineering 软&#xff1a;物体内部的组织疏松&#xff0c;受外力作用后容易改变形状软件&#xff1a; 计算机系统的组成部分&#xff0c;是指挥计算机进行计算、判断、处理信息的程序系统。通常分为系统软件和应用软件。借指某项活…...

省森林防火应急指挥系统

森林防火形势严峻 我国森林防火形势十分严峻&#xff0c;森林火灾具有季节性强、发现难、成灾迅速等特点&#xff0c;且扑救难度大、影响范围广、造成的损失重。因此&#xff0c;构建森林防火应急指挥系统显得尤为重要。 系统建设模式与架构 森林防火应急指挥系统采用大智慧…...

一键整理背包界面功能

一键整理功能 游戏《帕鲁》中的背包界面有一键整理的功能,就是玩家随意拖拽背包格子里的物品,然后导致背包界面看起来很凌乱,比如物品a在一个格子里数量为1,另一个格子里数量为3,或者还有空格杂夹在有物品的格子旁边,一键排序功能可以解决这个问题,(将相同物品整合到一…...

给DevOps加点料:融入安全性的DevSecOps

从前&#xff0c;安全防护只是特定团队的责任&#xff0c;在开发的最后阶段才会介入。当开发周期长达数月、甚至数年时&#xff0c;这样做没什么问题&#xff1b;但是现在&#xff0c;这种做法现在已经行不通了。 采用 DevOps 可以有效推进快速频繁的开发周期&#xff08;有时…...

uniapp 使用 pinia 状态持久化

1.创建文件 stores -index.js -global.js2.对应文件内容 index.js 安装插件 npm i pinia-plugin-persistedstate import { createPinia } from pinia; import persist from pinia-plugin-persistedstate; const pinia createPinia(); pinia.use(persist); export default pi…...

HarmonyOS鸿蒙-@State@Prop装饰器限制条件

一、组件Components级别的状态管理&#xff1a; State组件内状态限制条件 1.State装饰的变量必须初始化&#xff0c;否则编译期会报错。 // 错误写法&#xff0c;编译报错 State count: number;// 正确写法 State count: number 10; 2.嵌套属性的赋值观察不到。 // 嵌套的…...

Java Web开发进阶——Spring Boot与Spring Data JPA

Spring Data JPA 是 Spring 提供的一种面向数据访问的持久化框架&#xff0c;它简化了 JPA 的实现&#xff0c;为开发者提供了一种快速操作数据库的方式。在结合 Spring Boot 使用时&#xff0c;开发者能够快速完成数据库访问层的开发。 1. 介绍Spring Data JPA 1.1 什么是Spr…...

Vue Router4

Vue Router 是 Vue.js 官方的路由管理器。Vue Router 基于路由和组件的映射关系&#xff0c;监听页面路径的变化&#xff0c;渲染对应的组件。 安装&#xff1a; npm install vue-router。 基本使用&#xff1a; // src/router/index.js import {createRouter, createWebHa…...

计算机网络之---应用层协议概述

应用层协议概述 应用层协议是OSI模型中的第7层&#xff08;应用层&#xff09;定义的一组规则&#xff0c;用于支持和管理不同应用程序之间的通信。应用层协议定义了数据交换的格式、规则和约定&#xff0c;使得不同的系统或应用能够互相理解并正确地交换数据。它直接面向用户并…...

html + css 顶部滚动通知栏示例

前言 在现代网页设计中&#xff0c;一个吸引人的顶部滚动通知栏不仅能够有效传达重要信息&#xff0c;还能提升用户体验。通过使用HTML和CSS&#xff0c;我们可以创建既美观又功能强大的组件&#xff0c;这些组件可以在不影响网站整体性能的情况下提供实时更新或紧急通知。 本…...

wordpress主题什么意思/百度关键词seo

今天我们带来了关于Ubuntu 11.04&#xff0c;Windows 7&#xff0c;Mac OS X 10.7的对比测试&#xff0c;包括图片编辑、视频编码、多任务测试等。本次测试是在同一机子上展开的&#xff0c;这样避免了硬件的因素影响。Ubuntu 11.04&#xff0c;Mac OS X 10.7硬件参数&#xff…...

山西建设官方网站/用网站模板建站

【问题】安装adobe flash player&#xff0c;总是提示关闭IE【解决】新建一个文本文档&#xff0c;输入以下内容regsvr32 /u /s %windir%\system32\Flash9b.ocxregsvr32 /u /s %windir%\system32\Flash9f.ocxregsvr32 /u /s %windir%\system32\Macromed\Flash\Flash8a.ocxregsv…...

安徽平台网站建设公司/重庆seo团队

JSONP 和 JSON 的关系 事实上&#xff0c;JSONP 和 JSON 没有关系。若强行要有关系&#xff0c;也只能说 JSONP 这个技术使用了 JSON 这种数据格式。JSON 是一种数据交换格式。JSONP 是一种非官方跨域数据交互协议&#xff0c;是一种技术。 跨域是什么&#xff1f; 上面说了 JS…...

上海网站建设优势/青岛网站建设制作推广

题目 输入一个链表&#xff0c;从尾到头打印链表每个节点的值。返回新链表。 分析 可以借助栈也可以使用递归 代码 /*** 从尾到头打印列表*/ public class PrintListReverse {public static void main(String[] args) {ListNode node1 new ListNode();ListNode node2 ne…...

自己做的网站怎么上传网络/抖音推广

今天导入老师上周发的结束项目&#xff0c;发现需要下载最新版本的 tomcat , 然后百度了一下&#xff0c;发现有广告&#xff0c;所以我打算自己操作一下&#xff0c;发个图文教程。 因为之前学校使用的是 eclipse &#xff0c;版本是8.5的。所以需要重新下载。 说实话&#…...

我想做网站卖衣服做/制作一个网站的费用是多少

问题描述 农田灌溉是一项十分费体力的农活&#xff0c;特别是大型的农田。蒜头君想为农民伯伯们减轻农作负担&#xff0c;最近在研究一款高科技——灌溉机器人。它可以在远程电脑控制下&#xff0c;给农田里的作物进行灌溉。现在有一片 N 行 M 列的农田。农田的土壤有两种类型&…...