数据清洗 – 3.3 解析JSON文件 并转化成可用的DataFrame
目录
前言
从不同类型的数据源解析并读取数据是数据清洗的重要的环节。本篇文章讲述的是如何解析JSON文件,让我们开始吧。
提示:以下是本篇文章正文内容,下面案例可供参考
一、读取文件
百度网盘
链接: https://pan.baidu.com/s/1VmKij4jisUtPzyxaSUctwA
提取码: i8bd
Google Drive
https://drive.google.com/file/d/1W_Aw1x3BA0xaewjoZKzRKpVleqzdYBK0/view?usp=sharing
这个文件包含两部分,一个是”meta“的字典,一个是”data“的字典。
“meta”字典包含所有元信息,包括列名。“数据”字典实际上包含了我们想要的数据。
import json
with open("./Melbourne_bike_share.json") as json_file:
json_data = json.load(json_file)
print (type(json_data))
json_data['meta']['view']
二、清洗数据
2.1 提取数据
我们可以使用json_normalize()
来把"data"中的数据转换成table并存在DataFrame里面。
from pandas.io.json import json_normalize
df = json_normalize(json_data,'data')
df.head()
可以看到这时的数据并不是十分的干净,我们还得继续处理。
通过查看具体是数据,其实前8列的数据(0-7)我们是不需要的,所以我们把这些数据drop掉。
2.2 删除无用列,并重置index
# 删除前9列
df.drop(range(8), axis=1, inplace=True)
# 添加列名称
df.columns = ['id','featurename','terminalname','nbbikes','nbemptydoc','uploaddate','coordinates']
# 以id为index
df.set_index(df.id, inplace= True)
df.drop('id', 1, inplace = True)
df.head()
现在我们还有两个事情要做,一个是目前的时间戳需要转换为标准的时间格式,二是坐标需要进一步加工。
2.3 时间戳转换
df['uploaddate'] = pd.to_datetime(df['uploaddate'], unit='s')
df.head()
结果显示时间格式变成标准时间的格式了,接下来我们提取经纬度。
2.4 提取经纬度
# 提取经纬度
df['lat'] = df['coordinates'].apply(lambda col: col[1])
df['lon'] = df['coordinates'].apply(lambda col: col[2])
# 删除原来的coordinates 列
df.drop('coordinates', 1, inplace = True)
# 把对应数据的类型转换成数字类型
df = df.apply(pd.to_numeric,errors='ignore')
df.head()
经过了一系列的处理,我们得到了以下的数据。
现在就可以把它保存到csv文件或继续进行加工了。
总结
以上就是简单的JSON文件解析和数据提取。但这并不是数据清洗的全部,而仅仅是开始,目前只是将数据从数据存储文件中提取出来,并保存成相对容易操作的格式而已。接下来还需要进行数据内容的验证,比如检查是否有缺失值,是否存在数据不一致或错误数据,缺失值或数据不一致是否可以被修复,是否有重复的记录,是否存在离群值等。
下一篇文章会为大家介绍文本信息的预处理(Text Pre-processing)。