在熊猫数据框中加入和爆炸嵌套列表和字典

时间:2020-07-21 11:44:54

标签: python pandas

我正在努力用包含嵌套列表和字典的列规范化数据框。我尝试了zip,json_normlize和爆炸的组合,但均未成功。

以下代码可创建带有嵌套的当前布局示例:

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

2 个答案:

答案 0 :(得分:2)

分两步,我们可以使用.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

答案 1 :(得分:0)

这就是我要做的事情:

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的其余部分具有相同的结构。