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 并进行进一步的分析和处理。

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

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

相关文章

后门原理与实践

实验目录 windows主机与kali虚拟机实现互联互通使用netcat获取主机操作Shell,cron启动使用socat获取主机操作Shell, 任务计划启动使用MSF meterpreter生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell使用MSF meterpreter生成获取目标主机…

halcon3d 如何计算平面法向量!确实很简单

这个问题其实一直困扰了我很长时间,之前是怎么算的呢 对于一个平面,我会先求它的fit_primitives_object_model_3d去将它拟合,接下来用surface_normals_object_model_3d 算子生成它的法线,后用get_object_model_3d_params (ObjectModel3DNormals, ‘point_normal_x’, GenP…

Apache Hop从入门到精通 第一课 揭开Apache Hop神秘面纱

一、Apache Hop是什么? 1、Apache Hop,简称Hop,全称为Hop Orchestration Platform,即Hop 工作编排平台,是一个数据编排和数据工程平台,旨在促进数据和元数据编排的所有方面。Hop让你专注于你想要解决的问题…

Kafka集群安装

Apache kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,是消息中间件的一种,用于构建实时数据管道和流应用程序。 Kafka官网:http://kafka.apache.org/ 安装环境: Kafka集群环境搭建,依赖于zookeep…

嵌入式C语言:什么是指针?

目录 一、指针的基本概念 1.1. 定义指针 1.2. 赋值给指针 1.3. 解引用指针 1.4. 指针运算 1.5. 空指针 1.6. 函数参数 1.7. 数组和指针 1.8. 示例代码 二、指针在内存中的表示 2.1. 内存地址存储 2.2. 内存模型 2.3. 指针与硬件交互 2.4. 示例代码 三 、指针的重…

带格式 pdf 翻译

支持 openAI 接口,国内 deepseek 接口兼容 openAI 接口, deepseek api 又非常便宜 https://pdf2zh.com/ https://github.com/Byaidu/PDFMathTranslate

单片机实物成品-011 火灾监测

火灾监测(20个版本) 版本20: oled显示温湿度烟雾浓度火焰传感器天然气浓度窗户风扇水泵排气系统声光报警语音播报按键WIFI模块 ----------------------------------------------------------------------------- https://www.bilibili.com…

【redis初阶】初识Redis

目录 一、初识Redis 二、盛赞 Redis 三、Redis 特性 3.1 速度快 ​编辑3.2 基于键值对的数据结构服务器 3.3 丰富的功能 3.4 简单稳定 🐶 3.6 持久化(Persistence) 3.7 主从复制(Replication) 3.8 高可用(H…

数据库事务:确保数据一致性的关键机制

1. 什么是数据库事务 定义:事务(Transaction)是数据库管理系统中的一个逻辑工作单元,用于确保一组相关操作要么全部成功执行,要么全部不执行,从而维护数据的一致性和完整性。重要性:在多用户环…

CSS鼠标悬浮及其样式

在CSS中,鼠标悬浮(hover)是一种常见的交互效果。当用户将鼠标指针悬停在某个元素上时,CSS :hover 伪类可以用来定义该元素的样式变化。常用于按钮、链接、图片、列表项等元素的交互效果。 1. 基础语法 element:hover { /* 定义悬…

3354. 使数组元素等于零

3354、[简单] 使数组元素等于零 1、题目描述 给你一个整数数组 nums 。 开始时,选择一个满足 nums[curr] 0 的起始位置 curr ,并选择一个移动 方向 :向左或者向右。 此后,你需要重复下面的过程: 如果 curr 超过范…

虚拟机Linux Red Hat 7.9 Docker部署.Net 7 Zr.Admin项目(后端)

0、环境信息 应用部署在虚拟机里的docker,里面的应用访问宿主主机的MySQL 1、开启MySQL远程访问 使用非安装版MySQL参考Windows 使用 非安装版MySQL 8 为了避免出现 Host is not allowed to connect to this MySQL server 使用root用户登录 cmd进入到MySQL的bi…

UE小白学习日记

Level UE中的Level(关卡)和Unity中的Scene(场景)在概念和用途上非常相似,都是用来组织和管理3D环境的基本单位。让我为您详细对比一下: 相似之处: 它们都是游戏世界的容器,可以包含游戏对象、光照、地形等元素都支持场景/关卡的切换和加载都可以用来划分游戏内容,比如不同关…

cmake - build MS STL project

文章目录 cmake - build MS STL project概述笔记END cmake - build MS STL project 概述 MS在github上开源了VS IDE 用的STL实现。 想看看微软的测试用例中怎么用STL. 想先用CMake编译一个MS STL发布版出来。 笔记 CMake需要3.30以上, 拟采用 cmake-3.30.6-windows-x86_64.…

pyside6,让界面窗口在屏幕中间显示

有一些窗口需要剧中显示,比如登录窗口、消息窗口等。 def center(self):screen QApplication.primaryScreen().geometry()size self.geometry()self.move((screen.width() - size.width()) // 2,(screen.height() - size.height()) // 2) 首先,通过 “…

MCU 和 PSK

在加密和认证领域,MCU 和 PSK 是两个不同的概念,分别涉及硬件和密钥管理。下面是它们的含义和相关解释: 1. MCU 全称:Microcontroller Unit(微控制单元) 用途: MCU 是一种集成了 CPU、内存&am…

微信小程序之历史上的今天

微信小程序之历史上的今天 需求描述 今天我们再来做一个小程序,主要是搜索历史上的今天发生了哪些大事,结果如下 当天的历史事件或者根据事件选择的历史事件的列表: 点击某个详细的历史事件以后看到详细信息: API申请和小程序…

错误修改系列---基于RNN模型的心脏病预测(pytorch实现)

前言 前几天发布了pytorch实现,TensorFlow实现为:基于RNN模型的心脏病预测(tensorflow实现),但是一处繁琐地方 一处错误,这篇文章进行修改,修改效果还是好了不少;源文章为:基于RNN模型的心脏病…

vue.js+vite搭建一个简单的新春祈福活动网站

vue.jsvite搭建一个简单的新春祈福活动网站&#xff01;使用canvas技术&#xff0c;绘制视觉特效。 功能有&#xff1a;燃放烟花&#xff0c;和撞钟祈福。祈福撞钟我设计了是按钮事件&#xff0c;播放一个mp4动画&#xff0c;配上播放一段撞钟的生效文件mp3. <template>&…

vue3Class 与 Style 绑定

绑定 HTML class 1. 绑定对象 <div :class"{ active: isActive }"></div><divclass"static":class"{ active: isActive, text-danger: hasError }" ></div> //<div class"static active"></div>…