与第三方API接口对接的时候,是经常会遇到多层嵌套的json的,而我们需要的数据可能仅仅是某几个,或者是需要转换成二维表用来存入数据库。通常我都是用遍历来一遍一遍的for循环获取,但这样效率差劲不说,代码还显得特别low,今天安利一个非常快捷的工具给大家---pd.json_normalize。
首先导入相关库
import pandas as pd
from pandas.io.json import json_normalize
设定一个json
df = {
"error": 0,
"status": "success",
"results": [
"currentCity": "青岛",
"index": [
"title": "穿衣",
"zs": "较冷",
"tipt": "穿衣指数",
"des": "建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。",
'xuhao': [
'a','b','c','d'
"title": "紫外线强度",
"zs": "中等",
"tipt": "紫外线强度指数",
"des": "属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。",
'xuhao': [
1, 2, 3, 4
这里要说一下,我们手动设定json不能用json.dumps处理,否则会报参数错误,即应该使用dict,api获取的则直接使用即可。
假设我们要获取key=‘xuhao‘的值
先不加参数试试
x = json_normalize(df)
print(x)
结果如下
发现深层嵌套的地方并没有按照想要的方式实现,就引出了json_normalize的第一个参数:record_path ,该参数传入一个列表,功能是目标层级:
x = json_normalize(df, record_path=['results','index','xuhao'],)
print(x)
结果如下
20211022更新:这里发现之前写的一个小bug 如果record_path直接定位到一个字典结构,即{},则会把里面的value全部拆开成单个字符,比如{‘name’,‘zhang’},会变成{‘name’,[‘z’,’‘h’,‘a’,‘n’,‘g’},所以record_path定位到的地方应该是一个列表里包含字典,即[{}],这样会自动识别出字典的key,
这里可以看到已经取出了我们需要的字段,列名为0 ,那么如果想要其他数据呢,则需要传入meta参数,同样传入列表,放入想展示的其他key
x = json_normalize(df, record_path=['results', 'index', 'xuhao'],
meta=['error', ['results', 'currentCity'], ['results', 'index', 'zs']])
print(x)
结果如下
如果有的json的某一个key不是稳定存在呢,比如这样
df = {
"error": 0,
"status": "success",
"results": [
"currentCity": "青岛",
"index": [
"title": "穿衣",
"zs": "较冷",
"tipt": "穿衣指数",
"des": "建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。",
'xuhao': [
'a', 'b', 'c', 'd'
"title": "紫外线强度",
"tipt": "紫外线强度指数",
"des": "属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。",
'xuhao': [
1, 2, 3, 4
我们对json进行了一点修改,删除了"title"为 "紫外线强度"对应的zs,那么会有什么结果呢,执行一下试试:
KeyError: "Try running with errors='ignore' as key 'zs' is not always present"
得到报错,尝试过执行但zs并不是一直存在,也给出了建议,即errors=‘ignore’ ,再试试:
x = json_normalize(df, record_path=['results', 'index', 'xuhao'],
meta=['error', ['results', 'currentCity'], ['results', 'index', 'zs']],
errors='ignore')
print(x)
结果如下:
会发现缺失的地方被NaN代替,但是也成功的转换成了dataframe,后续就可以进行正常的数据操作啦!!!
与第三方API接口对接的时候,是经常会遇到多层嵌套的json的,而我们需要的数据可能仅仅是某几个,或者是需要转换成二维表用来存入数据库。通常我都是用遍历来一遍一遍的for循环获取,但这样效率差劲不说,代码还显得特别low,今天安利一个非常快捷的工具给大家---pd.json_normalize。 首先导入相关库 import pandas as pdfrom pandas.io.json import json_normalize设定一个jsondf = { "error"
2016-03-22 00:06:24.4463094 中文测试字符
2016-03-22 00:06:32.4565680 需要编辑encoding
2016-03-22 00:06:32.6835965 abc
2016-03-22 00:06:32.8041945 egb
2.pandas 读取数据
import pandas as pd
data = pd.read_table('Z:/test.txt',header=None,encoding='gb2312',delim_whitespace=
文章目录本文章拟解决问题(不是这些问题请绕路):一、笔者的遇到的困难二、操作步骤1.从数据库中读入数据读入的原始数据如图:2.将数据炸裂:将JSON列表拆分,一个JSON对象一行1). 具体的代码过程:踩坑:因为pandas读入数据,将 `JSON列表` 格式当做 `object`,所以在数据炸裂前需要先将数据格式改成 `list`。2). 数据炸裂结果,如下图所示:数据规模 从 `288 * 3` 变成 `7488 * 3`,原始数据中的JSON列表已经被拆成一个一个的JSON对象。总结
本文章拟解决问题
前言:Json数据介绍
Json是一个应用及其广泛的用来传输和交换数据的格式,它被应用在数据库中,也被用于API请求结果数据集中。虽然它应用广泛,机器很容易阅读且节省空间,但是却不利于人来阅读和进一步做数据分析,因此通常情况下需要在获取json数据后,将其转化为表格格式的数据,以方便人来阅读和理解。常见的Json数据格式有2种,均以键值对的形式存储数据,只是包装数据的方法有所差异:
a. 一般JSON对象
采用{}将键值对数据括起来.
今天展示一个利用pandas将json数据导入excel例子,主要利用的是pandas里的read_json函数将json数据转化为dataframe。先拿出我要处理的json字符串:
strtext='[{"ttery":"min","issue":"20130801-3391","code":"8,4,5,2,9","code1":"297734529
作者:东哥起飞
调用API和文档数据库会返回嵌套的JSON对象,当我们使用Python尝试将嵌套结构中的键转换为列时,数据加载到pandas中往往会得到如下结果:
df = pd.DataFrame.from_records(results [“ issues”],columns = [“ key”,“ fields”])
说明:这里results是一个大的字典,issues是results其中的一个键,issues的值为一个嵌套JSON对象字典的列表,后面会看..
excel_name:excel文件名, sheet_name: 表名
pan = pandas.read_excel(excel_name, sheet_name)
test_data = []
for row in pan.index.values: # 获取行号的索引,并对其进行遍历:
# 根据row来获取每一行指定的数据 并利用to_dict转成字典
row_data = pan.loc[row, ["case_id", "module","case_title",
pandas可以将
读取到的表格型数据(文件不一定要是表格)转成DataFrame类型的数据结构,然后我们可以通过操作DataFrame进行数据分析,数据预处理以及行和列的操作等。下面介绍一些常用
读取文件的方法
1、read_csv函数
功能:从文件、URL、文件新对象中加载带有分隔符的数据,默认分隔符是逗号。
data.txt
a,b,c,d,name
1,2,3,4,
python
5,6,7,8,java
9,10,11,12,c++
data = pd.read_csv(data.txt)
print(data)
a b c d name
在.net 2.0中提取这样的
json
{"name":"lily","age":23,"addr":{"city":guangzhou,"province":guangdong}}
引用命名空间
using Newtonsoft.
Json;
using Newtonsoft.
Json.Linq;
可以把上面的
JSON看成一个对象.你只要写对应的类即可
在Python中处理嵌套的JSON数据可以通过json和pandas等库实现。
使用json库可以将JSON数据转换为Python对象,然后使用Python的数据处理方式进行操作。json库提供了两个函数——loads和dumps。其中,loads将JSON数据转换为Python对象,dumps将Python对象转换为JSON数据。在嵌套JSON数据的情况下,可以使用递归来遍历数据。
使用pandas库可以将JSON数据转换为DataFrame,方便进行数据分析和可视化处理。pandas提供了read_json和json_normalize等函数来解析JSON数据。其中,read_json函数将JSON数据转换为DataFrame,json_normalize函数可以展平嵌套的JSON数据,方便进行数据分析处理。
例如,一个嵌套的JSON数据如下:
"id": 123,
"name": "John",
"address": {
"province": "Guangdong",
"city": "Shenzhen",
"street": "Futian Road"
"scores": [
{"subject": "Math", "score": 90},
{"subject": "English", "score": 85},
{"subject": "Chinese", "score": 95}
使用json库可以将其转换为Python对象,并进行操作:
import json
# 将JSON数据转换为Python对象
json_str = '{ "id": 123, "name": "John", "address": { "province": "Guangdong", "city": "Shenzhen", "street": "Futian Road" }, "scores": [ {"subject": "Math", "score": 90}, {"subject": "English", "score": 85}, {"subject": "Chinese", "score": 95} ] }'
data_dict = json.loads(json_str)
# 获取属性值
print(data_dict["id"])
print(data_dict["address"]["province"])
print(data_dict["scores"][0]["score"])
使用pandas库可以将其转换为DataFrame,并进行数据分析和可视化处理:
import pandas as pd
# 将JSON数据转换为DataFrame
data_df = pd.read_json(json_str)
# 展示所有数据
print(data_df)
# 展开嵌套的JSON数据
data_norm = pd.json_normalize(data_dict, record_path=['scores'], meta=['id', 'name', ['address', 'province'], ['address', 'city'], ['address', 'street']])
print(data_norm)
这样就能方便地处理嵌套JSON数据了。