Pandas处理JSON文件read_json()一文详解+代码展示

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Pandas处理JSON文件read_json()一文详解+代码展示

前言


本文接上一篇博客:Python处理JSON文件数据各类操作一文详解。


处理JSON文件一般并且进行统计或分析都需要把JSON文件格式转换为dataframe形式或是将dataframe转换为JSON,这都需要用到to_json()和read_json()函数。如果能够掌握该两种函数的参数用法能够节省不少时间和代码对后续的文件再处理,因此本篇文章初衷为详细介绍并运用此函数来达到彻底掌握的目的。希望读者看完能够提出问题或者看法,博主会长期维护博客做及时更新。纯分享,希望大家喜欢。


与read_json函数对应的为to_json,一个为将dataFrame转换为json文件形式,一个为json转换为dataFrame形式而read_josn就是将json数据转换为dataframe数据类型,与to_json的函数参数形式大体都相同。to_json想要了解可以看我上篇文章:Pandas处理JSON文件to_json()一文详解


read_json


read_json()在pandas库中,常用于pandas数据分析和统计。read_json()函数的参数如下:

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


一般来说read_json用的比to_json要多一些,dataframe适合用来分析。我们知道json文件的格式很像字典形式,转为dataframe也差不多。


read_json官网解释:pandas.read_json

f38715887c7d4954aaf493266461f85b.png

b9b1846241254497ba468be3ddbef60a.png

2b78ae128c634e4fa8f01c01aba1baa1.png


参数说明:


path_or_buf:接收格式为[a valid JSON string or file-like, default: None] 选择JSON文件或者是指定可以是URL。有效的URL形式包括http、ftp、s3和文件。对于URL文件,需要指定本地文件目录。例如,本地文件可以是file://localhost/path/to/table.json。

orient:接收格式为[string],指示预期的JSON字符串格式。兼容的JSON字符串可以由to_json生成并且具有具体的orient。其中设定的orient取决于JSON文件的形式以及你想要转为dataframe的形式。

‘split':将行索引index,列索引columns,值数据data分开来。dict like {‘index’ -> [index], ‘columns’ -> [columns], ‘data’ -> [values]}。

‘records':将列表list格式,以[{列名->值},..]形式输出。list like [{column -> value}, … , {column -> value}]

'index':将字典以{行索引:{列索引:值}}以这种形式输出dict like {index -> {column -> value}}。

'columns':将字典以{列索引:{行索引:值}}以这种形式输出 dict like {column -> {index -> value}}。

'values':就全部输出值就好了。允许值和默认值取决于type参数的值。

当想要转化的格式为'series'

允许的orients为 {'split','records','index'}

默认为index

当orient为index时,Series的行索引index必须唯一

当想要转化的格式为‘frame’时

允许的orients为{'split','records','index'}

默认定义为columns,列索引

当指定的orien为index或是columns时,Dataframe的index必须唯一

当指定的orient为index、columns和records时,Dataframe的columns必须唯一

版本0.23.0中的新增内容:“table”作为orient参数的允许值

typ:指定将JSON文件转化的格式,(series or frame),默认为frame

dtype:如果为True,则推断数据类型,如果将列的dict转换为数据类型,则使用它们,如果为False,则根本不推断数据类型,仅适用于数据。

convert_axes:将轴转换为正确的数据类型。默认为True

convert_dates:boolean类型,默认True。用于解析时间数据,如果为True,则将选定带有以下的datelike列名称标签:

it ends with '_at',以_at结尾

it ends with '_time',以_time结尾

it begins with 'timestamp',以timestamp开始

it is 'modified', 以modified命名的label标签

it is 'date'以date命名的label标签

keep_default_dates:boolean类型,默认为True。如果分析日期,则分析默认的datelike列

numpy:默认为False,直接解码到numpy阵列。仅支持数字数据,但不支持非数字列和索引标签。还要注意,如果numpy=True,则每个术语的JSON顺序必须相同。

precise_float:boolean类型,默认False。设置为在将字符串解码为双倍值时启用更高精度(STROD)函数。默认(False)使用快速但不太精确的内置功能。

date_unit:string类型,默认None。用于检测是否转换日期的时间戳单元。默认行为是尝试并检测正确的精度,但如果不需要,则传递“s”、“ms”、“us”或“ns”中的一个,以分别强制解析秒、毫秒、微秒或纳秒。

lines:boolean类型,默认False。以每行json对象的形式读取文件。

encoding:str, default is ‘utf-8’。用于解码py3字节的编码。

chunksize:integer类型,默认为None。返回JsonReader对象进行迭代。有关chunksize的更多信息,请参阅line-delimted json docs文件。只有当lines=True时,才能传递此消息。如果该值为“无”,则文件将一次全部读入内存。

compression:{‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None},默认为infer。用于实时解压缩磁盘数据。如果“推断”,则使用gzip、bz2、zip或xz,如果path\u或\u buf是以“”结尾的字符串。gz','。bz2’,”。zip”或“xz”,否则不进行解压缩。如果使用“zip”,zip文件必须只包含一个要读入的数据文件。设置为“无”表示无解压缩。


返回形式


return返回的result为Series或是DataFrame,取决于typ的值。


参数修改演示


这里我们首先创建一个json,后面再调JSON文件格式就好了:

cf851d54a4f14a9da043a89667dddd70.png


不加参数:

import json
import pandas as pd
with open('hive_sql.json','r')as json_f:
    df1=pd.read_json(json_f)
df1

23183597ca3b4f029d6de890ffbd91fb.png


split:


这个模式要注意一下,他对JSON格式要求很严格,必须要有:


{"columns":["col 1","col 2"],
  "index":["row 1","row 2"],
  "data":[["a","b"],["c","d"]]}


这样的格式,而且json文件的key的名字只能为index,cloumns,data这三个,另外多一个key都不行,少一个也不行。

df1=pd.read_json(json_f,orient='split')

5bc201060f9e4afb8b60dbcd4ddb3d78.png

这里我们改一下名字:

cdeb59f87ac6433d98568829c9c8c89a.png

或者多加个key:

80d07a11166d412a8c155236b6434db2.png


都会导致错误:


JSON data had unexpected key(s): d, c, i

JSON data had unexpected key(s): cooo


records


records没有像split那么多限制,它会将对象键转化为列索引:


df1=pd.read_json(json_f,orient='records')


49a2700d57014f92802f5826f7600e7d.png


index


与上述相反,以行索引为列,以键为index索引:

df1=pd.read_json(json_f,orient='index')

 

a636b87fba4f47fea3c55c2a334be8c3.png

colmuns


与record几乎差不多,与index完全相反:


df1=pd.read_json(json_f,orient='colmuns')


4fe9dbaa57e74ffd99779510f35385f5.png


Values


df1=pd.read_json(json_f,orient='values')


和我想的有点不一样,values仅仅输出它的data,而显示为还是和colmuns一样:

922071ad03b34acfa3684dbbc26edd02.png


typ


可指定转换为Series或者是Dataframe:


df1=pd.read_json(json_f,orient='colmuns',typ='series')


427a5eef26d04d5d91fcc6a4c3379596.png


dtype

convert_axes

convert_dates

keep_default_dates


这几个都为True,会自行进行JSON分析,不想要存在这五个条件的datetime文件转换为datetime数据类型:


it ends with '_at',以_at结尾

it ends with '_time',以_time结尾

it begins with 'timestamp',以timestamp开始

it is 'modified', 以modified命名的label标签

it is 'date'以date命名的label标签

可以将convert_dates设定为False。


修改JSON文件加入datetime格式label:


b6b2bfa4a3ce41b4b3877c6a10999d46.png

自动解析为datetime数据类型:

7ec1293777ef4dc48ce3dae71ab6ec5a.png


precise_float


默认为False,若存在需要精度更高的解析时,可以开启。

目录
相关文章
|
26天前
|
JSON 算法 vr&ar
目标检测笔记(五):查看通过COCOEvaluator生成的coco_instances_results.json文件的详细检测信息,包含AP、AR、MR和DR等
本文介绍了如何使用COCO评估器通过Detectron2库对目标检测模型进行性能评估,生成coco_instances_results.json文件,并利用pycocotools解析该文件以计算AP、AR、MR和DR等关键指标。
59 1
目标检测笔记(五):查看通过COCOEvaluator生成的coco_instances_results.json文件的详细检测信息,包含AP、AR、MR和DR等
|
4天前
|
XML JSON JavaScript
Pandas JSON
10月更文挑战第27天
11 0
|
26天前
|
JSON 数据格式 Python
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
这篇文章介绍了一个Python脚本,用于统计TXT或JSON文件中特定单词的出现次数。它包含两个函数,分别处理文本和JSON文件,并通过命令行参数接收文件路径、目标单词和文件格式。文章还提供了代码逻辑的解释和示例用法。
34 0
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
|
29天前
|
JSON API 数据格式
低代码实现鸿蒙API返回JSON转TS及快速生成ArkUI代码
低代码实现鸿蒙API返回JSON转TS及快速生成ArkUI代码
33 0
低代码实现鸿蒙API返回JSON转TS及快速生成ArkUI代码
|
2月前
|
XML JSON JavaScript
R JSON 文件
JSON: JavaScript Object Notation(JavaScript 对象表示法)。
67 29
|
1月前
|
JSON 数据格式
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
LangChain-20 Document Loader 文件加载 加载MD DOCX EXCEL PPT PDF HTML JSON 等多种文件格式 后续可通过FAISS向量化 增强检索
54 2
|
25天前
|
JSON 数据格式 计算机视觉
Opencv实用笔记(一): 获取并绘制JSON标注文件目标区域(可单独保存目标小图)
本文介绍了如何使用OpenCV和Python根据JSON标注文件获取并绘制目标区域,同时可将裁剪的图像单独保存。通过示例代码,展示了如何读取图片路径、解析JSON标注、绘制标注框并保存裁剪图像的过程。此外,还提供了相关的博客链接,供读者进一步学习。
25 0
|
2月前
|
JSON 前端开发 中间件
React读取properties配置文件转化为json对象并使用在url地址中
本文介绍了如何在React项目中读取properties配置文件,将其内容转化为JSON对象,并在请求URL地址时使用这些配置。文章详细说明了异步读取文件、处理字符串转换为JSON对象的过程,并提供了一个封装函数,用于在发起请求前动态生成配置化的URL地址。
60 1
|
2月前
|
JSON 前端开发 JavaScript
java中post请求调用下载文件接口浏览器未弹窗而是返回一堆json,为啥
客户端调接口需要返回另存为弹窗,下载文件,但是遇到的问题是接口调用成功且不报错,浏览器F12查看居然返回一堆json,而没有另存为弹窗; > 正确的效果应该是:接口调用成功且浏览器F12不返回任何json,而是弹窗另存为窗口,直接保存文件即可。
126 2
|
2月前
|
JSON 前端开发 JavaScript
解析JSON文件
解析JSON文件
114 9

热门文章

最新文章