在Pandas列中拆分多个词典

时间:2017-12-12 21:44:02

标签: python pandas dictionary analysis

我正在尝试在pandas列中拆分包含列表的字典,但它对我不起作用...

调用时列看起来像这样;

df.topics[3]

输出

"[{'urlkey': 'webdesign', 'name': 'Web Design', 'id': 659}, {'urlkey': 'productdesign', 'name': 'Product Design', 'id': 2993}, {'urlkey': 'internetpro', 'name': 'Internet Professionals', 'id': 10102}, {'urlkey': 'web', 'name': 'Web Technology', 'id': 10209}, {'urlkey': 'software-product-management', 'name': 'Software Product Management', 'id': 42278}, {'urlkey': 'new-product-development-software-tech', 'name': 'New Product Development: Software & Tech', 'id': 62946}, {'urlkey': 'product-management', 'name': 'Product Management', 'id': 93740}, {'urlkey': 'internet-startups', 'name': 'Internet Startups', 'id': 128595}]"

我希望只留下'name'和'id'放入topic_1,topic_2等单独的列中。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你可以尝试一下。

import json
df.topics.apply(lambda x :  {x['id']:x['name'] for x in json.loads(x.replace("'",'"'))} )

您提供的行的输出是:

{659: 'Web Design',
 2993: 'Product Design',
 10102: 'Internet Professionals',
 10209: 'Web Technology',
 42278: 'Software Product Management',
 62946: 'New Product Development: Software & Tech',
 93740: 'Product Management',
 128595: 'Internet Startups'}

答案 1 :(得分:0)

您应该尝试一种简单的方法

    dt = df.topic[3]
    li = []
    for x in range(len(dt)):
       t = {dt[x]['id']:dt[x]['name']}
       li.append(t)
    print(li)

输出为-

    [{659: 'Web Design'},
    {2993: 'Product Design'},
    {10102: 'Internet Professionals'},
    {10209: 'Web Technology'},
    {42278: 'Software Product Management'},
    {62946: 'New Product Development: Software & Tech'},
    {93740: 'Product Management'},
    {128595: 'Internet Startups'}]

首先,我们在dt中采用 df.topic [3] 的值,该值以列表和列表内的字典的形式出现,然后我们获得一个临时列表{{1} },其中我们添加(添加)我们的值,现在我们循环运行 de.topic(我们以dt为单位)的值的长度,现在在{ {1}}我们通过li[]t添加id或名称,这是dt[0]['id'],因为x增加所有值都在t中出现,然后加上dt[0]['name']  我们正在转换字典中的值,并将其附加到临时列表'659:'Web Design'