Pandas将多个属性的JSON转换为DataFrame

0 投票
1 回答
44 浏览
提问于 2025-04-14 18:02

我有一些JSON数据,这些数据是由属性(列)和每个属性的元素(数据)组成的。

[
    {
        "attribute_id": "a1",
        "attribute_name": "Profailkir Idkir",
        "elements":[
             {
                "formValues": [
                    "0000a634940"
                ],
                "id": "0000a634940"
            },
            {
                "formValues": [
                    "0000c84724"
                ],
                "id": "0000c84724"
            }]
     },
     {
        "attribute_id": "a2",
        "attribute_name": "Profailkir Nama",
        "elements":[
             {
                "formValues": [
                    "'AFIFAH BINTI KHAIRUL JUBRI"
                ],
                "id": "'AFIFAH BINTI KHAIRUL JUBRI"
            },
            {
                "formValues": [
                    "'AINUN JARIAH BINTI HASHIM"
                ],
                "id": "'AINUN JARIAH BINTI HASHIM"
            }]
     }
]

但是当我尝试使用

import pandas as pd
df = pd.DataFrame(data)
print(df)

时,结果只是追加了数据,而没有提取出表单的值。

在这里输入图片描述

我该如何将其转换为下面这种格式的数据框?

Profailkir Idkir Profailkir Nama
0 0000a634940 'AFIFAH BINTI KHAIRUL JUBRI
1 0000c84724 'AINUN JARIAH BINTI HASHIM

1 个回答

1

假设你想从每个元素中获取 id 的值,你可以用一种叫做字典推导的方法来重新整理你的数据:

df = pd.DataFrame({ e['attribute_name'] : [ v['id'] for v in e['elements'] ] for e in data })

输出结果:

  Profailkir Idkir              Profailkir Nama
0      0000a634940  'AFIFAH BINTI KHAIRUL JUBRI
1       0000c84724   'AINUN JARIAH BINTI HASHIM

如果你想要 formValues(并且它们在每个属性中长度相同),你可以稍微修改一下代码:

df = pd.DataFrame({ e['attribute_name'] : sum([v['formValues'] for v in e['elements'] ], []) for e in data })

对于你的示例数据,结果是一样的。

撰写回答