通过熊猫列中的关键字提取值

时间:2018-06-27 14:38:01

标签: python pandas

我有一列是字典列表。我仅通过名称键提取了值,然后将其保存到列表中。由于我需要将列运行到tfidVectorizer,因此我需要将列作为一串单词。我的代码如下。

def transform(s,to_extract):
return [object[to_extract] for object in json.loads(s)]

cols = ['genres','keywords']

for col in cols:
    lst = df[col]
    df[col] = list(map(lambda x : transform(x,to_extract='name'), lst))
    df[col] = [', '.join(x) for x in df[col]]

为了测试,这里有2行。

data = {'genres': [[{"id": 851, "name": "dual identity"},{"id": 2038, "name": "love of one's life"}],
               [{"id": 5983, "name": "pizza boy"},{"id": 8828, "name": "marvel comic"}]],
    'keywords': [[{"id": 9663, "name": "sequel"},{"id": 9715, "name": "superhero"}],
                [{"id": 14991, "name": "tentacle"},{"id": 34079, "name": "death", "id": 163074, "name": "super villain"}]]
   }

df = pd.DataFrame(data)

我能够提取必要的数据并进行相应保存。但是,我觉得代码太冗长,我想知道是否还有一种更Python的方法可以达到相同的结果?

一行的所需输出应为字符串,仅以逗号分隔。例如,“双重身份,热爱一生”。

1 个答案:

答案 0 :(得分:1)

这是您需要的吗?

df.applymap(lambda x : pd.DataFrame(x).name.tolist())
Out[278]: 
                                genres                   keywords
0  [dual identity, love of one's life]        [sequel, superhero]
1            [pizza boy, marvel comic]  [tentacle, super villain]

更新

df.applymap(lambda x : pd.DataFrame(x).name.str.cat(sep=','))
Out[280]: 
                             genres                keywords
0  dual identity,love of one's life        sequel,superhero
1            pizza boy,marvel comic  tentacle,super villain