【Pandas】深入解析`pd.read_json()`函数

news2024/11/18 3:21:47

【Pandas】深入解析pd.read_json()函数

在这里插入图片描述

🌈 欢迎莅临我的个人主页👈这里是我深耕Python编程、机器学习和自然语言处理(NLP)领域,并乐于分享知识与经验的小天地!🎇
🎓 博主简介:
我是云天徽上,一名对技术充满热情的探索者。多年的Python编程和机器学习实践,使我深入理解了这些技术的核心原理,并能够在实际项目中灵活应用。尤其是在NLP领域,我积累了丰富的经验,能够处理各种复杂的自然语言任务。
🔧 技术专长:
我熟练掌握Python编程语言,并深入研究了机器学习和NLP的相关算法和模型。无论是文本分类、情感分析,还是实体识别、机器翻译,我都能够熟练运用相关技术,解决实际问题。此外,我还对深度学习框架如TensorFlow和PyTorch有一定的了解和应用经验。
📝 博客风采:
在博客中,我分享了自己在Python编程、机器学习和NLP领域的实践经验和心得体会。我坚信知识的力量,希望通过我的分享,能够帮助更多的人掌握这些技术,并在实际项目中发挥作用。机器学习博客专栏几乎都上过热榜第一:https://blog.csdn.net/qq_38614074/article/details/137827304,欢迎大家订阅
💡 服务项目:
除了博客分享,我还提供NLP相关的技术咨询、项目开发和个性化解决方案等服务。如果您在机器学习、NLP项目中遇到难题,或者对某个算法和模型有疑问,欢迎随时联系我,我会尽我所能为您提供帮助,个人微信(xf982831907),添加说明来意。

在数据处理和分析中,JSON(JavaScript Object Notation)格式的数据是非常常见的。Pandas库提供了一个便捷的函数pd.read_json(),允许我们直接将JSON格式的数据读取为DataFrame对象,极大地简化了数据处理流程。本文将深入解析pd.read_json()函数的各个参数,并通过具体的使用案例来展示其应用。

一、pd.read_json()函数概述

pd.read_json()函数是Pandas库中用于读取JSON格式数据并转换为DataFrame对象的函数。它支持多种JSON数据格式,包括JSON字符串、JSON文件、URL指向的JSON数据等。通过调整函数的参数,我们可以控制数据的读取方式和处理细节。

1.1 函数签名

pandas.read_json(path_or_buf=None, orient=None, typ='frame', dtype=None, convert_axes=None, convert_dates=True, keep_default_dates=True, numpy=False, precise_float=False, date_unit=None, encoding=None, lines=False, chunksize=None, compression='infer', nrows=None, **kwds)

1.2 主要参数详解

  • path_or_buf:字符串类型,指定要读取的JSON文件路径或JSON字符串。
  • orient:指定JSON数据中的键(keys)如何转换为DataFrame的列和行。可选值包括:‘split’、‘records’、‘index’、‘columns’、'values’等。
  • typ:默认为’frame’,指定返回的数据类型,通常我们不需要修改这个参数。
  • dtype:字典类型,用于指定DataFrame中列的数据类型。
  • convert_axes:布尔类型,默认为True,表示将轴(行索引和列名)转换为DataFrame中的数据类型。
  • convert_dates:布尔类型或列表类型,默认为True,表示是否将JSON中的字符串转换为日期类型。如果为列表,则只转换列表中指定的列。
  • keep_default_dates:布尔类型,默认为True,表示是否将默认的日期字符串(如ISO 8601日期)转换为日期类型。
  • numpy:布尔类型,默认为False,表示是否将JSON中的数字转换为NumPy的整数或浮点数类型。
  • precise_float:布尔类型,默认为False,表示是否将JSON中的浮点数读取为高精度的NumPy浮点数类型。
  • date_unit:字符串类型,用于指定日期时间的单位,如’s’(秒)、‘ms’(毫秒)、‘us’(微秒)等。
  • encoding:字符串类型,用于指定读取文件时使用的字符编码。
  • lines:布尔类型,默认为False,表示是否按行读取JSON数据。当数据是一个包含多个JSON对象的文本文件时,这个参数非常有用。
  • chunksize:整数类型,用于指定按行读取时每次读取的行数,常用于处理大数据集。
  • compression:字符串类型,用于指定文件的压缩方式,如’gzip’、'bz2’等。

二、使用案例

2.1 读取JSON文件

假设我们有一个名为data.json的JSON文件,内容如下:

{
  "name": ["Alice", "Bob", "Charlie"],
  "age": [25, 30, 35],
  "city": ["New York", "San Francisco", "Los Angeles"]
}

我们可以使用pd.read_json()函数将其读取为DataFrame:

import pandas as pd

df = pd.read_json('data.json')
print(df)

输出:

     name  age           city
0   Alice   25       New York
1     Bob   30  San Francisco
2  Charlie   35    Los Angeles

注意,默认情况下Pandas会将JSON对象中的键(keys)作为DataFrame的列名,值(values)作为数据。

2.2 读取JSON字符串

我们也可以直接将JSON字符串读取为DataFrame:

json_str = '''
[
  {"name": "Alice", "age": 25, "city": "New York"},
  {"name": "Bob", "age": 30, "city": "San Francisco"},
  {"name": "Charlie", "age": 35, "city": "Los Angeles"}
]
'''

df = pd.read_json(json_str)
print(df)

输出:

       name  age           city
0     Alice   25       New York
1       Bob   30  San Francisco
2  Charlie   35    Los Angeles

在这个例子中,我们提供了一个包含多个JSON对象的JSON字符串,并使用pd.read_json()函数将其解析为DataFrame。由于数据是以列表的形式组织的,Pandas默认将其解析为多个行。

2.3 读取具有复杂结构的JSON数据

当JSON数据具有更复杂的结构时,我们可以使用orient参数来控制数据的解析方式。例如,如果JSON数据以记录(records)的形式组织,我们可以这样读取:

[
  {"name": "Alice", "info": {"age": 25, "city": "New York"}},
  {"name": "Bob", "info": {"age": 30, "city": "San Francisco"}}
]

我们可以使用orient='records'参数来读取这种数据:

json_str_records = '''
[
  {"name": "Alice", "info": {"age": 25, "city": "New York"}},
  {"name": "Bob", "info": {"age": 30, "city": "San Francisco"}}
]
'''

df = pd.read_json(json_str_records, orient='records')
print(df)

但这样读取后,info列将是一个字典对象。为了将其展平为单独的列,我们可以使用json_normalize函数:

from pandas.io.json import json_normalize

normalized_df = json_normalize(json.loads(json_str_records), 'info', ['name'])
print(normalized_df)

输出:

      age           city     name
0      25       New York    Alice
1      30  San Francisco      Bob

2.4 读取包含日期格式的JSON数据

如果JSON数据中包含日期格式的字符串,我们可以使用convert_dates参数来自动将它们转换为Pandas的日期类型:

[
  {"name": "Alice", "birthday": "1990-01-01"},
  {"name": "Bob", "birthday": "1985-05-15"}
]
json_str_dates = '''
[
  {"name": "Alice", "birthday": "1990-01-01"},
  {"name": "Bob", "birthday": "1985-05-15"}
]
'''

df = pd.read_json(json_str_dates, convert_dates=['birthday'])
print(df)
print(df.dtypes)

输出将显示birthday列的数据类型已经被转换为datetime64[ns]

2.5 按行读取大型JSON文件

对于非常大的JSON文件,我们可以使用lines=True参数按行读取数据,并使用chunksize参数指定每次读取的行数。这有助于我们有效地处理大文件而不消耗过多的内存:

for chunk in pd.read_json('large_file.jsonl', lines=True, chunksize=1000):
    process(chunk)  # 假设process是一个处理DataFrame的函数

在这个例子中,我们假设large_file.jsonl是一个按行组织的JSON文件(也称为JSON Lines),并使用lines=Truechunksize=1000参数来按块读取数据。然后,我们可以在循环中处理每个数据块。

三、总结

pd.read_json()函数是Pandas库中用于读取JSON数据的重要工具。通过灵活使用其参数,我们可以有效地处理各种复杂结构和格式的JSON数据。无论是从文件中读取JSON数据,还是处理JSON字符串,pd.read_json()都能为我们提供极大的便利。希望本文的解析和案例能够帮助你更好地理解和使用这个函数。

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

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

相关文章

学习笔记|如何移植NCNN

在计算机视觉和深度学习领域,NCNN(Netural Network Computer Vision)是一个轻量级的神经网络计算框架,被广泛应用于各类嵌入式设备和移动平台。今天,让我们一同跟随共创社团队的步伐,揭秘他们如何进行NCNN的…

React Hooks是如何保存的

React 函数式组件是没有状态的,需要 Hooks 进行状态的存储,那么状态是怎么存储的呢?Hooks是保存在 Fiber 树上的,多个状态是通过链表保存,本文将通过源代码分析 Hooks 的存储位置。 创建组件 首先我们在组件中添加两…

净念——雷江书画艺术汇报展暨作品捐赠仪式在合阳博物馆盛大开幕

古莘初夏万物秀,丹青妙笔谱华章!5月25日上午9时,由合阳县委宣传部、合阳文化和旅游局主办,合阳历史文化博物馆、合阳县旅游发展有限公司承办的净念雷江书画艺术汇报展暨作品捐赠仪式在合阳县历史博物馆盛大开幕。 陕西省原副省长魏增军&#…

SAP锁机制(SAP Locks)经验小结

1. 数据一致性与锁 为什么要有锁机制?其背后的核心逻辑在于“保证数据的一致性”。 当数据被应用程序修改时,我们必须要保证修改后的数据具有一致性。在SAP系统中,将一致的数据状态从一个状态变动到另一个一致状态的时间跨度被称为LUW&…

宝塔安装java环境Jdk1.8

1.打开宝塔——选择“终端”——输入SSH的服务器IP和SSH账号,选择密码验证,输入密码 2。登录成功后,输入:yum list java-1.8*,用于列出所有与 “java-1.8” 相关的软件包 yum list java-1.8* 3.安装Jdk1.8: yum insta…

登峰造极,北斗相伴——纪念人类首次登顶珠穆朗玛峰71周年

71年前的今天,1953年5月29日11时30分,人类实现了一个伟大的壮举:首次登上了珠穆朗玛峰,这座海拔8848.86米的世界最高峰。这是一次充满了艰辛、勇气和智慧的探险,也是一次改变了人类历史和文化的探险。 自那以后&#…

有没有好用的供应商协同软件,能实现文件的便捷协作?

制造业供应商间文件协作非常频繁,而频繁的文件协作也是保证业务有效开展的基础,对于确保生产流程的顺畅和高效至关重要。以下是一些常见的制造业供应商文件协作的例子: 采购订单和合同:采购订单是供应商和制造商之间最基本的文件协…

力扣hot100:23. 合并 K 个升序链表

23. 合并 K 个升序链表 这题非常容易想到归并排序的思路,俩升序序列合并,可以使用归并的方法。 不过这里显然是一个多路归并排序;包含多个子数组的归并算法,这可以让我们拓展归并算法的思路。 假设n是序列个数,ni是…

ROS运行文件(LaunchFile)和参数(Parameter)

本文主要介绍ROS的Launch File和Parameter概念,通过Launch File启动单个或多个节点,并通过Parameter配置启动参数。 更多内容,访问专栏目录获取实时更新。 当你的应用中包含了很多工作包,每个工作包了又包含了多个节点时&#xff…

本地部署大模型的几种方式

现在大模型可谓是满天飞, 只要你稍微关注时下的AI资讯, 几乎每天都有新的AI大模型出现. 这之中当然有诸如GhatGPT, Gemini这样的私有化大模型, 更吸引人关注的可能是开源的可私有化部署的一些大模型. 比如Meta前两天开放的Lamma 3, Google的Gemma开源模型, 国内也有Qwen以及YI等…

java海滨学院班级回忆录源码(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的海滨学院班级回忆录。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 海滨学院班级回忆录的…

高速公路边坡监测预警系统解决方案

一、概述 高速公路是国家交通大动脉,高速公路的安全、稳定是人民生命安全的保障。高速公路地基和边坡在线监测系统是交接高速公路运行状态的耳目,是保证高速公路稳定、安全保障人民生命财产安全、充分发挥高速公路国家交通大动脉的重要手段。高速边坡在线…

Java——执行流程

一、执行流程 1、示例 //第一个Java程序 public class Hello{public static void main(String[] args){System.out.println("Hello World!");} } 编译: 执行: 我们可以看到这里的是类名,而不是字节码文件名 Hello.class &#…

从tensorflow导入EarlyStopping能运行但是一直提示未解析

在pycharm中导入早停机的库时,碰上一个问题 from tensorflow.keras.callbacks import EarlyStopping这一条代码中,EarlyStopping一直有个红色波浪线,代表着找不到这个库,提示未解析啥的。 但是运行是可以运行的,虽然可…

Android Context 详解

一、什么是Context? Context是一个抽象基类。在翻译为上下文,是提供一些程序的运行环境基础信息。 Context下有两个子类,ContextWrapper是上下文功能的封装类(起到方法传递的作用,主要实现还是ContextImpl&#xff0…

[oeasy]python019_ 如何在github仓库中进入目录_找到程序代码_找到代码

继续运行 🥋 回忆上次内容 上上次 真写了万行代码 这 万行代码 都是写在明面上的 这次 使用git命令 下载了 github上面的仓库 下载仓库 之后 又该 怎么办呢?🤔 进入目录 首先看看 目前 在哪个目录 pwd present working directory 当前目…

在全志H616核桃派开发板上进行音频配置的方法详解

耳机口​ 核桃派板载的3.5mm音频输出口,该接口有一定的输出功率,可以使用耳机或者带功放的扬声器都可以播放声音。 查看音频设备​ 可以使用下面指令来查看音频信息: aplay -l音频播放测试​ 播放系统自带wav音频文件测试, 下面指令的au…

【wiki知识库】03.前后端的初步交互(展现所有的电子书)

📝个人主页:哈__ 期待您的关注 目录 一、🔥今日目标 二、📂前端配置文件补充 三、🌏前端Vue的改造 四、💡总结 一、🔥今日目标 在上一篇文章当中,我已带大家把后端的一些基本工…

脑图工具 在学习系统架构中的使用

系统,有人把它比作一个黑盒,有人比作一个树洞。呃,其实二者都隐含的表达了一个意思,盘根错节,一言难尽,欲说还休,说了又像是隔靴搔痒,感觉没说透。 学习,理解和展示一个…

信创操作系统生态

信创操作系统生态 中标麒麟 官网https://www.cs2c.com.cn/scheme/product/7.html 银河麒麟 官网 https://www.kylinos.cn/ 中科方德 官网 https://www.nfschina.com/index.php?catid30 中兴新支点(中兴公司自研的linux操作系统) 官网 http:/…