python中基于pandas模块:json与dataframe的互相转换

一、   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]]

通过对上面方法的描述,可以发现在进行数据转换的时候,首先要弄清楚的是转换的方式,其次再去调用相应的方法。道路千万条,逻辑第一条。

  • 45
    点赞
  • 195
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

theskylife

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值