在数据框架中联接和分解嵌套列表和字典

2024-09-30 22:27:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力规范化包含嵌套列表和字典的列的数据帧。我尝试了zip、json_normlize和explode的组合,但没有成功

下面是创建当前嵌套布局示例的代码:

d = {
    'user_id': 'user1',
    'user_emails': [['user1@workemail.example', 'user1@home_email.example']],
    'user_emails_data': [[{'type': 'emailAddress', 'id': 1}, {'type': 'emailAddress', 'id': 2}]] }
df = pd.DataFrame(data = d)

Current Output

[Desired output


Tags: 数据idjson列表data字典exampletype
2条回答

以下是我将如何着手:

d['user_emails'] = d['user_emails'][0]

d["user_emails_data"] = d["user_emails_data"][0]

d["user_emails_data_type"] = []
d["user_emails_data_id"] = []

for val in d["user_emails_data"]:
    d["user_emails_data_type"].append(val["type"])
    d["user_emails_data_id"].append(val['id'])

del d["user_emails_data"]


pd.DataFrame(d)

这将产生:

    user_id user_emails           user_emails_data_type user_emails_data_id
0   user1   user1@workemail.example     emailAddress    1
1   user1   user1@home_email.example    emailAddress    2

它假定dict的其余部分具有相同的结构

在两个步骤中,我们可以使用.explodepd.json_normalize.join重新创建df

uid = df.set_index('user_id')['user_emails'].explode().reset_index()

df1 = uid.join(pd.json_normalize(df['user_emails_data'].explode()))

print(df1)

  user_id               user_emails          type  id
0   user1   user1@workemail.example  emailAddress   1
1   user1  user1@home_email.example  emailAddress   2

相关问题 更多 >