首页 > 解决方案 > 将嵌套的 json 转换为具有特定输出的数据框

问题描述

假设我有一些 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'])

在此处输入图像描述

但这不包括date, icp,icpr

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

    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'

标签: pythonjsonpandasdata-science

解决方案


你需要爆发。

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

状态镉 州名 详细信息.id 详细信息.日期 详细信息.icp 详细信息.icpr
0 英国 北阿坎德邦 2312-k 2019 年 10 月 10 日 2233 3.434
0 英国 北阿坎德邦 2312-k 2019 年 10 月 11 日 6443 23.232
1 向上 北方邦 2712-k 2019 年 10 月 10 日 2233 32.434
1 向上 北方邦 5412-k 2019 年 10 月 11 日 6443 31.232

推荐阅读