如何从pandas字典列表字符串列提取值生成新列genres1?
提取Pandas字符串格式字典列表中的name值
问题场景
- 现有
top_chart_moviesDataFrame,genres列存储的是字典列表格式的字符串(示例值:'[{"id": 18, "name": "Drama"}, {"id": 80, "name": "Crime"}]') - 需求:提取每个字典的
"name"字段值组成列表,生成新列genres1,要求top_chart_movies['genres1'].head(2)输出:1881 ["Drama","Crime"] 3337 ["Drama","Crime"] - 原尝试代码
top_chart_movies['genres1'] = [value for key, value in top_chart_movies['genres']]无效,原因是genres列元素是字符串,而非可直接遍历的Python列表对象。
解决方案
方法1:使用ast.literal_eval解析字符串
ast.literal_eval可安全将字符串格式的列表/字典转换为对应Python数据结构,适合处理非标准JSON格式的字符串:
import ast import pandas as pd top_chart_movies['genres1'] = top_chart_movies['genres'].apply( lambda x: [item['name'] for item in ast.literal_eval(x)] )
方法2:使用json.loads解析(适用于标准JSON字符串)
如果genres列的字符串是标准JSON格式(键值均为双引号),可使用json模块解析:
import json import pandas as pd top_chart_movies['genres1'] = top_chart_movies['genres'].apply( lambda x: [item['name'] for item in json.loads(x)] )
验证结果
执行上述代码后,运行top_chart_movies['genres1'].head(2)即可得到目标输出。
内容的提问来源于stack exchange,提问作者Zenvega
相关产品推荐
相关产品推荐

