我有一个关于电影的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]
这将返回一个列表(不带引号)。
答案 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