3-02-2 存储与加载 JSON 文件

存储与加载 JSON 文件

JSON (JavaScript Object Notation) 是一种基于 JavaScript 语法子集的开放标准数据交换格式 ,采用完全独立于编程语言的文本格式,易于阅读编写和机器解析生成,并有效地提升网络传输效率。

JSON 语法规则中,以键/值对 (key/value pair) 的方式用来保存对象,键/值对组合中的键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着值,而对象和数组是比较常用的两种数据类型:

  • 花括号保存对象 - {“obj” : ‘value’}
  • 方括号保存数组而数据由逗号分隔 - [1, 2, 3] 或 [‘a’, ‘b’, ‘c’]

以下实例将上节的数据框转换成 JSON 字符串,读取 CSV 文件,并列出三行,每行四栏,当转换成 JSON 格式时,可以发现回传内容为字符串格式,以栏 (columns) 为主,共有四个对象,分别如下:

{
        "Date":{"0":"2020\\/1\\/1 0:00","1":"2020\\/1\\/1 0:15","2":"2020\\/1\\/1 0:30"},
        "compteur_100054073":{"0":0,"1":0,"2":0},
        "compteur_100052606":{"0":0,"1":0,"2":0},
        "compteur_100003032":{"0":0,"1":1,"2":0}
}

实例

import pandas as pd
  
dataDir = './data/comptage_velo_2020.csv'
df = pd.read_csv(dataDir, nrows=10) 
part = df.iloc[:3,:4]
print(part,"\n")
print(part.to_json())
  
输出结果为:
           Date  compteur_100054073  compteur_100052606  compteur_100003032
0  2020/1/1 0:00                   0                   0                   0
1  2020/1/1 0:15                   0                   0                   1
2  2020/1/1 0:30                   0                   0                   0
  
  
'{"Date":{"0":"2020\\/1\\/1 0:00","1":"2020\\/1\\/1 0:15","2":"2020\\/1\\/1 0:30"},"compteur_100054073":{"0":0,"1":0,"2":0},"compteur_100052606":{"0":0,"1":0,"2":0},"compteur_100003032":{"0":0,"1":1,"2":0}}'

因此,可以利用 orient 这个参数来决定数据框转换 JSON 的格式

  • columns: 面向列,默认是 DataFrame 来作为嵌套的 JSON 对象,且列标签充当主索引。
  • index: 面向索引,默认是 Series 来作为嵌套的 JSON 对象,索引标签是主键:
  • records: 面向记录,序列化数据为一列 JSON 数组,数组内是 列标签 -> 值的记录,索引标签不包括在内。
  • values: 面向值,序列化为嵌套的 JSON 数组值,列和索引标签不包括在内。
  • split: 面向切分,序列化成一个 JSON 对象,它包括单项的值、索引和列标签。

实例

print("面向列", part.to_json(orient="columns"),"\n")
print("面向索引", part.to_json(orient="index"),"\n")
print("面向记录", part.to_json(orient="records"),"\n")
print("面向值", part.to_json(orient="values"),"\n")
print("面向切分", part.to_json(orient="split"),"\n")
  
输出结果为:
  
面向列 {"Date":{"0":"2020\/1\/1 0:00","1":"2020\/1\/1 0:15","2":"2020\/1\/1 0:30"},"compteur_100054073":{"0":0,"1":0,"2":0},"compteur_100052606":{"0":0,"1":0,"2":0},"compteur_100003032":{"0":0,"1":1,"2":0}} 
  
面向索引 {"0":{"Date":"2020\/1\/1 0:00","compteur_100054073":0,"compteur_100052606":0,"compteur_100003032":0},"1":{"Date":"2020\/1\/1 0:15","compteur_100054073":0,"compteur_100052606":0,"compteur_100003032":1},"2":{"Date":"2020\/1\/1 0:30","compteur_100054073":0,"compteur_100052606":0,"compteur_100003032":0}} 
  
面向记录 [{"Date":"2020\/1\/1 0:00","compteur_100054073":0,"compteur_100052606":0,"compteur_100003032":0},{"Date":"2020\/1\/1 0:15","compteur_100054073":0,"compteur_100052606":0,"compteur_100003032":1},{"Date":"2020\/1\/1 0:30","compteur_100054073":0,"compteur_100052606":0,"compteur_100003032":0}] 
  
面向值 [["2020\/1\/1 0:00",0,0,0],["2020\/1\/1 0:15",0,0,1],["2020\/1\/1 0:30",0,0,0]] 
  
面向切分 {"columns":["Date","compteur_100054073","compteur_100052606","compteur_100003032"],"index":[0,1,2],"data":[["2020\/1\/1 0:00",0,0,0],["2020\/1\/1 0:15",0,0,1],["2020\/1\/1 0:30",0,0,0]]} 

接着将数据框存入 JSON 格式的文档中,从下例来看,要以面向列的方式来存储,读取时才是存入时的形状。

实例

part.to_json("./data/convert1.json", orient="columns")
part.to_json("./data/convert2.json", orient="index")
print(pd.read_json("./data/convert1.json")) 
print(pd.read_json("./data/convert2.json")) 
  
输出结果为:
  
        Date	compteur_100054073	compteur_100052606	compteur_100003032
0	2020-01-01 00:00:00	0	0	0
1	2020-01-01 00:15:00	0	0	1
2	2020-01-01 00:30:00	0	0	0
  
                                0              1              2
Date                2020/1/1 0:00  2020/1/1 0:15  2020/1/1 0:30
compteur_100054073              0              0              0
compteur_100052606              0              0              0
compteur_100003032              0              1              0

Python数据处理-文章目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值