从嵌套字典列表格式化Pandas Dataframe

guz6ccqo  于 2023-02-11  发布在  其他
关注(0)|答案(1)|浏览(110)

我是Pandas的新手,很难让我的头缠在这个问题上。我找了一段时间后还没能找到我的问题的好答案。我正试图从字典列表中创建一个Pandas数据框架。
我的嵌套字典列表如下:

"iam": {
    "data": [
      {
        "Account": "123",
        "Alias": "aws-alias-123",
        "Roles": [
          {
            "Role": "ADFS-111"
          },
          {
            "Role": "ADFS-222"
          },
          {
            "Role": "ADFS-333"
          }
        ],
        "Users": []
      },
      {
        "Account": "456",
        "Alias": "aws-alias-456",
        "Roles": [
          {
            "Role": "ADFS-444"
          },
          {
            "Role": "ADFS-555"
          },
          {
            "Role": "ADFS-666"
          }
        ],
        "Users": []
      },
      {
        "Account": "789",
        "Alias": "aws-alias-789",
        "Roles": [
          {
            "Role": "ADFS-777"
          },
          {
            "Role": "ADFS-888"
          },
          {
            "Role": "ADFS-999"
          }
        ],
        "Users": []
      },
    ]
  }

我的当前代码:

roles = pd.DataFrame(event['iam']['data']).explode('Roles', ignore_index=True).reindex(columns=['Account','Roles'])

正在生产

Account       Roles
0   123   {'Role': 'ADFS-111'}
1   123   {'Role': 'ADFS-222'}
2   123   {'Role': 'ADFS-333'}
3   456   {'Role': 'ADFS-444'}
4   456   {'Role': 'ADFS-555'}
5   456   {'Role': 'ADFS-666'}
6   789   {'Role': 'ADFS-777'}
7   789   {'Role': 'ADFS-888'}
8   789   {'Role': 'ADFS-999'}

我想要的输出

Account   Roles
123       ADFS-111
          ADFS-222
          ADFS-333
456       ADFS-444
          ADFS-555
          ADFS-666
789       ADFS-777
          ADFS-888
          ADFS-999

如果可能的话。

sdnqo3pr

sdnqo3pr1#

我希望这个答案能解决你的问题
设置:

data = {
    "iam": {
        "data": [
            {
                "Account": "123",
                "Alias": "aws-alias-123",
                "Roles": [
                    {"Role": "ADFS-111"},
                    {"Role": "ADFS-222"},
                    {"Role": "ADFS-333"}],
                "Users": []
            },
            {
                "Account": "456",
                "Alias": "aws-alias-456",
                "Roles": [
                    {"Role": "ADFS-444"},
                    {"Role": "ADFS-555"},
                    {"Role": "ADFS-666"}],
                "Users": []
            },
            {
                "Account": "789",
                "Alias": "aws-alias-789",
                "Roles": [
                    {"Role": "ADFS-777"},
                    {"Role": "ADFS-888"},
                    {"Role": "ADFS-999"}],
                "Users": []
            },
        ]
    }
}

代码:

import pandas as pd

df = pd.json_normalize(data['iam']['data'], 'Roles', ['Account'], record_prefix='Roles.')
df = df.explode('Roles.Role')
df = df.rename(columns={'Roles.Role': 'Roles'})
df = df.loc[:, ['Account', 'Roles']]
print(df)

结果

Account     Roles
0     123  ADFS-111
1     123  ADFS-222
2     123  ADFS-333
3     456  ADFS-444
4     456  ADFS-555
5     456  ADFS-666
6     789  ADFS-777
7     789  ADFS-888
8     789  ADFS-999

相关问题