一、 Json转为DataFrame
当我们在进行数据分析的时候,经常会遇到各种各样格式的文件,今天在这里整理一下对于json格式的文件怎么转化为dataframe的形式的文件。
1.1、对于简单的json形式
所谓的简单的json格式,就是将字典形式的文件,直接输出成dataframe形式的文件。
下面将创建一个test.json文件来进行示范:
obj="""[{"姓名": "张三", "住处": "天朝", "宠物": "koala", "兄弟": "李四" },{"姓名": "李四", "住处": "天朝", "宠物": "cat", "兄弟": "张三"}]""" with open("test.json","w",encoding="utf-8") as f: f.write(obj)
a.利用pandas自带的read_json直接解析字符串
import pandas as pd df = pd.read_json("test.json",encoding="utf-8", orient='records') print(df)
b.利用json库loads方法和pandas库中的json_normalize方法
import json from pandas.io.json import json_normalize data=open("test.json",encoding="utf-8").read() data_list = json.loads(data) df = json_normalize(data_list) print(df) # pandas进行对json_normalize进行了调整,调用方式如下 import json import pandas as pd data=open("test.json",encoding="utf-8").read() data_list = json.loads(data) df = pd.json_normalize(data_list) print(df)
2、对于稍微复杂一些的json进行处理
复杂的一些的json格式的文件,例子如下,我们想要得到的数据是张三兄弟的数据,同样先写入json文件:
obj = """ {"姓名": "张三", "住处": ["天朝", "岛国", "万恶的资本主义日不落帝国"], "宠物": null, "兄弟": [{"姓名": "李四", "年龄": 25, "宠物": "汪星人"}, {"姓名": "王五", "年龄": 23, "宠物": "喵星人"}] }""" with open("test1.json","w",encoding="utf-8") as f: f.write(obj)
a.利用json的loads和pandas的DataFrame
import json import pandas as pd with open("test1.json","r",encoding="utf-8") as f: info=f.read() data_list = json.loads(info) brother_info = data_list["兄弟"] df=pd.DataFrame(brother_info) # print(type(brother_info)) # print(brother_info) # print(brother_info)
b.利用json的loads和pandas的json_normalize
from pandas.io.json import json_normalize import json with open("test1.json","r",encoding="utf-8") as f: info=f.read() data_list = json.loads(info) brother_info = data_list["兄弟"] df = json_normalize(brother_info) print(df)
c.利用json的loads和pandas的read_json
import json import pandas as pd with open("test1.json","r",encoding="utf-8") as f: info=f.read() data_list = json.loads(info) brother_info = data_list["兄弟"] json_data=json.dumps(brother_info) df=pd.read_json(json_data,orient="records") print(df)
总结:
在以上的例子中,可以发现在进行简单的格式转换的时候,可以使用pandas库的read_json进行处理,在进行复杂的格式转换的时候就要配合json库进行使用。无论是什么样的json数据,基本思路都是现将json文件读取进来,然后选择想要转换的数据,或是列表或是字典,然后再进行转换。
在这里重点介绍一下两个函数,read_json方法和json_normalize方法。
在使用时,要注意read_json方法中orient参数的选择,同时json_normalize可以将传入的列表、字典形式的json格式数据直接转换成dataframe。
二、DataFrame转为json
通常情况下,我们使用的都是pandas中的to_json()函数,可以通过设置orient参数来转换成为我们想要的json格式,orient函数有以下几个参数:”split”, “records”, “index”, “columns”, “values”。
Series可选参数为:”index”(默认), “split”, “records”,
DataFrame可选参数:”columns”(默认),split”,”records”, “index”,”values”
首先,取一个DataFrame来进行测试(这里采用张三兄弟的数据),数据信息如下:

1.columns
df.to_json(orient="columns",force_ascii=False)
按照column进行转换,效果图如下:
{"宠物":{"李四":"汪星人","王五":"喵星人"},"年龄":{"李四":25,"王五":23}}
2.split
df.to_json(orient="split",force_ascii=False)
按照split进行转换,效果图如下:
{"columns":["宠物","年龄"],"index":["李四","王五"],"data":[["汪星人",25],["喵星人",23]]}
3.records
df.to_json(orient="records",force_ascii=False)
按照records进行转换,效果图如下:
[{"宠物":"汪星人","年龄":25},{"宠物":"喵星人","年龄":23}]
4.index
df.to_json(orient="index",force_ascii=False)
按照index进行转换,效果图如下:
{"李四":{"宠物":"汪星人","年龄":25},"王五":{"宠物":"喵星人","年龄":23}}
5.values
df.to_json(orient="values",force_ascii=False)
按照values进行数据转换,效果图如下:
[["汪星人",25],["喵星人",23]]
通过对上面方法的描述,可以发现在进行数据转换的时候,首先要弄清楚的是转换的方式,其次再去调用相应的方法。道路千万条,逻辑第一条。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207609.html原文链接:https://javaforall.net
