将嵌套的 json 转换为具有特定输出的数据框

Posted

技术标签:

【中文标题】将嵌套的 json 转换为具有特定输出的数据框【英文标题】:converting nested json into dataframe with a specific output 【发布时间】:2021-08-27 11:22:14 【问题描述】:

假设我有一些 JSON 如下

response = 
        "totalrecords": 2,
        "data": [
            
                "stateCd": "U.K",
                "stateName": "uttarakhand",
                "details": 
                    "id": [
                        "2312-k",
                        "2312-k"
                    ],
                    "date": [
                        "10-OCT-2019",
                        "11-OCT-2019"
                    ],
                    "icp": [
                        2233,
                        6443
                    ],
                    "icpr": [
                        3.434,
                        23.232
                    ]
                
            ,
            
                "stateCd": "U.P",
                "stateName": "uttar pradesh",
                "details": 
                    "id": [
                        "2712-k",
                        "5412-k"
                    ],
                    "date": [
                        "10-OCT-2019",
                        "11-OCT-2019"
                    ],
                    "icp": [
                        2233,
                        6443
                    ],
                    "icpr": [
                        32.434,
                        31.232
                    ]
                
            
        ]
    

我想把它转换成如下的数据框

但在尝试使用pandas.json_normalize() 将其转换为数据帧时 我无法达到我想要的输出

我尝试过的:

data_trunc=response['data'] # to extract data from response
pd.json_normalize(data_trunc)

pd.json_normalize(data_trunc,record_path=['details','id'],meta=['stateCd','stateName'])

但这不包括dateicpicpr

所以我尝试了不同的排列组合

    pd.json_normalize(data_trunc,record_path=[['details','id'],['date']],meta=['stateCd','stateName'])

pd.json_normalize(data_trunc,record_path=[['details','id'],['details'.'date']],meta=['stateCd','stateName'])

但遇到同样的错误TypeError: unhashable type: 'list'

【问题讨论】:

你的response = ...实际上不是JSON,它是一个Python dict,当这样格式化时看起来像JSON。 (虽然在这里没关系,因为pandas.json_normalize() 确实需要dict 输入) 【参考方案1】:

你需要爆发。

pd.json_normalize(data_trunc).apply(pd.Series.explode)

stateCd stateName details.id details.date details.icp details.icpr
0 U.K uttarakhand 2312-k 10-OCT-2019 2233 3.434
0 U.K uttarakhand 2312-k 11-OCT-2019 6443 23.232
1 U.P uttar pradesh 2712-k 10-OCT-2019 2233 32.434
1 U.P uttar pradesh 5412-k 11-OCT-2019 6443 31.232

【讨论】:

以上是关于将嵌套的 json 转换为具有特定输出的数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何将嵌套的json结构转换为数据框

如何展平多个嵌套的 json 并转换为数据框?

使用 pyspark 将 spark 数据帧转换为嵌套 JSON

Pandas:将 DataFrame 与嵌套数组结合或合并 JSON 输出

在转换为具有拆分方向的 json 之前从数据框中删除索引

Scala Spark - 从简单的数据框创建嵌套的 json 输出