mapreducer清洗实操json格式转化日期_如何在Pandas中处理JSON

JSON是广泛用于存储数据和交换的格式。 

在使用API调取各种所需的数据时,几乎都是使用json作为数据载体。而往往数据分析的初学者们都是以csv 格式作为主要的练习对象。当真正开始接触现实的数据挖掘和数据清洗时,往往会不知所措。

在本文中,我们将学习如何导入JSON文件,JSON字符串 并将其导入到Pandas dataframe并使用它。

Pandas具有内置功能

read_json()

,可将JSON字符串和文件导入pandas数据帧,而

json_normalize()

函数可与嵌套json一起使用,但由于json的书写格式众多,往往能很直观的理解这个转化过程。

在这篇文章中,我们将以更简单的方式理解这一难点

什么是JSON?

76c30ff64e7d5efa6d3341459203f209.png

JSON是JavaScript对象表示法的简写。

这是一种文本格式,通常用于在Web上交换数据。

如果你只学过python,那么你可能会发现python中的字典和这个JavaScript的语法十分相像

格式如下:

91bc62d3a83eb09e034ae28ead55f5d5.png

是的乍一看让人头皮发麻

但是

d0e51d7c822c74d190455894a223718e.png

如果我们合理的使用一些工具对这个 raw data进行一下 格式美化后,json的可读性会强很多:

ae5ef476357bc6b4029bf651fc711278.png

如果我们把每个{  } 结构当做一个“箱子”,箱子里有这个箱子的主人的所有信息,那么JSON看起来就会像这样:

b73ec1395f7c764b9feec2342d62048d.png

下面,我们将使用基本的 with open( ) 方法先读取 json 文件:

# importing necessary packgesimport pandas as pdimport json# use original with open() to read(load) json fileswith open("blockbusters.json") as f:    data = json.load(f)    

我们可以观察一下读取的数据

247912f1686be8025c5b68a22126ee51.png

然而!

JSON数据往往数据看起来比较混乱,嵌套结构也让人们本能的感到有些头晕,所以我个人往往会切片一节json数据,配合网上的json阅读工具(http://jsonviewer.stack.hu/) 进行最初的数据理解:

276aa2bdd6a8733bc67a062a6366a8a5.png

接着我们可以用 最简单的 pd.DataFrame( )来将我们已经读取了的json数据转化成DataFrame:

df = pd.DataFrame(data)df.head()

Output:

c1461b6865f8b99d6ea8bf67628665b8.png

当然,以上步骤完全可用pandas 的 read_json()方法一步到位:

df = pd.read_json("blockbusters.json", orient = "record")df.head()

Output:3054e87f54849e34b9f06dbef3336ceb.png

想必细心的你已经发现了,在这次读入数据的过程中,我们还调整了一个参数:orient 

那么这个orient到底指的是什么意思呢?

orient 参数 是为了指明 我们所输入JSON的格式,在文中一开始我们也说到,json的书写格式众多,而orient 参数对应的json 格式如下表所示:

'split' : dict like {index -> [index], columns -> [columns], data -> [values]}'records' : list like [{column -> value}, ... , {column -> value}]'index' : dict like {index -> {column -> value}}'columns' : dict like {column -> {index -> value}}'values' : just the values array
Series可选参数为:"index"(默认), "split", "records",DataFrame可选参数:"columns"(默认),split","records", "index","values"

现在,让我们了解一下这些orient意味着什么

让我们创建一个索引为r1,r2以及列c1和c2的

df = pd.DataFrame([[1, 2], [3, 4]],                  index=['r1', 'r2'],                   columns=['c1', 'c2'])

orient index

df.to_json(orient='index')

输出显示一个带有数据索引作为键的json字符串,即r1和r2

Output:

‘{  “r1”:{“c1”:1,”c2”:2},  ”r2”:{“c1”:3,”c2”:4}  }’

orient split

这一次,我们设置同一数据的orient值为split

df.to_json(orient='split')

输出是一个JSON字符串,键作为列、索引和数据,因此基本上它将上述数据帧分为这三个键及其相应的值

'{   "columns":["c1","c2"],   "index":["r1","r2"],   "data":[[1,2],[3,4]]   }'

orient records

如果我们将orient设置为records,那么它将转化成字典列表,每个字典将包含行值。

df.to_json(orient='records')

Output:

data_json3 = data.to_json(orient='records')print(data_json3)df3=pd.read_json(data_json3, orient='records')df3# 结果[{"name":"A","values":123,"describe":"aaaaaaaaaaaaaaaaa"},{"name":"B","values":135,"describe":"bbbbbbbbbbbbb"},{"name":"C","values":146,"describe":"cccccc"}]name  values  describe0  A  123  aaaaaaaaaaaaaaaaa1  B  135  bbbbbbbbbbbbb2  C  146  cccccc

以上就是对最基础的json 信息读入的一些心得和解释。之后我还会解释很多在使用API的过程中,常见的数据清洗问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值