包含双引号中的列表的DataFrame列

时间:2019-04-01 07:30:18

标签: python pandas

我有一个关于电影的dataframe,其中一列是genre

此列的条目采用列表形式--

[{'id': 35, 'name': 'Comedy'}, 
 {'id': 18, 'name': 'Drama'}, 
 {'id': 10751, 'name': 'Family'}, 
 {'id': 10749, 'name': 'Romance'}]

我的目的是从列表中提取流派并将其存储为诸如['Comedy', 'Drama', 'Family', 'Romance']之类的列表。

例如,当我打印列的条目时- data['genres'][1]返回引号内的列表(数据类型:字符串)

"[{'id': 35, 'name': 'Comedy'}]"

有人可以帮忙获得不含引号的列表吗?像[{'id': 35, 'name': 'Comedy'}]一样,我应该可以从那里拿走它。

当我创建自定义示例时,它会按预期运行,并返回不带引号的list。例如-

ref = pd.DataFrame({'col':[[1,2,3],[4,3,2]]})
ref['col'][0]

这将返回一个列表(不带引号)。

1 个答案:

答案 0 :(得分:1)

问题是列表具有字符串表示形式,因此有必要先将其转换为字典列表,然后通过get进行提取:

a = [{'id': 35, 'name': 'Comedy'}, 
     {'id': 18, 'name': 'Drama'}, 
     {'id': 10751, 'name': 'Family'},
     {'id': 10749, 'name': 'Romance'}]

df = pd.DataFrame({'col':a}).astype(str)

import ast

df['genres'] = df['col'].apply(lambda x: ast.literal_eval(x).get('name'))
print (df)
                                col   genres
0      {'id': 35, 'name': 'Comedy'}   Comedy
1       {'id': 18, 'name': 'Drama'}    Drama
2   {'id': 10751, 'name': 'Family'}   Family
3  {'id': 10749, 'name': 'Romance'}  Romance

如有必要,获取所有值:

df = pd.DataFrame({'a':list('abcd'),'col':a}).astype(str)

df = df.join(pd.DataFrame([ast.literal_eval(x) for x in df.pop('col')], index=df.index))
print (df)
   a     id     name
0  a     35   Comedy
1  b     18    Drama
2  c  10751   Family
3  d  10749  Romance