相关文章推荐
爱跑步的山寨机  ·  Troubled trying to ...·  7 月前    · 
深情的小摩托  ·  【SQL ...·  1 年前    · 
   与第三方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对象 采用{}将键值对数据括起来.
今天展示一个利用pandasjson数据导入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数据可以通过jsonpandas等库实现。 使用json库可以将JSON数据转换为Python对象,然后使用Python的数据处理方式进行操作。json库提供了两个函数——loads和dumps。其中,loads将JSON数据转换为Python对象,dumps将Python对象转换为JSON数据。在嵌套JSON数据的情况下,可以使用递归来遍历数据。 使用pandas库可以将JSON数据转换为DataFrame,方便进行数据分析和可视化处理。pandas提供了read_jsonjson_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数据了。