一个名为top_chart_movies的panda Dataframe ,它有一个列genres,该列有一个字典列表,如下图
所示
列值在列表中具有不同数量的字典项。
如何将值提取为列表并将其包含到另一列genres1中,其中
top_chart_movies [类型1]. head(2)
1881 ["Drama","Crime"]
3337 ["Drama","Crime"]
我尝试了下面的代码,但它不工作.
top_chart_movies['genres1'] = [value for key, value in top_chart_movies['genres']]
编辑:当我键入以下代码时
top_chart_movies['genres'].iloc[1]
我得到:
'[{"id": 18, "name": "Drama"}, {"id": 80, "name": "Crime"}]'
因此,这些值存储为字符串。
2条答案
按热度按时间mkshixfv1#
这应该行得通:
工作原理:如果我们迭代
top_chart_movies["genres"]
,如下所示:for genres_list in top_chart_movies["genres"]
,则对于每一行,genres_list
将包含一个字典列表,字典的关键字为"id"
和"name"
。例如,在第一行中,genres_list
将为[{"id": 18, "name": "Drama"}, {"id": 80, "name": "Crime"}]
。对于每一行,我们在
genres_list
上迭代,例如for genres_item in genres_list
,在genres_item
中的每一次迭代都得到一个字典,例如{"id": 18, "name": "Drama"}
,然后我们只取"name"
部分:genres_item["name"]
.因此,对于每一行,为了获得流派的
"name"
元素的列表,我们执行[genres_item['name'] for genres_item in genres_list]
,并在每一行中执行如下操作:[[genres_item['name'] for genres_item in genres_list] for genres_list in top_chart_movies["genres"]]
正如提问者所指出的,原来genres列表是字符串表示的,但是没有指定是python的字符串表示还是json的字符串表示还是其他的,所以我们只能用
json.loads
或者ast.literal_eval
解析。如果它在json string中,应该可以:
如果它是python字符串表示形式,这应该可以工作:
h7appiyu2#
您不需要与每个键关联的所有值,而只需要与每个键
["name"]
对应的值。一旦知道如何从一个列表中提取它们,就可以将该函数map到列表列中。