如何从dataset['crew']列的每行数据中提取导演姓名?
从数据集crew字段提取导演姓名的方案
字段格式说明
你的数据集crew字段存储的是字符串化的列表字典,示例如下:
"[{'credit_id': '52fe4284c3a36847f8024f49', 'department': 'Directing', 'gender': 2, 'id': 7879, 'job': 'Director', 'name': 'John Lasseter', 'profile_path': '/7EdqiNbr4FRjIhKHyPPdFfEEEFG.jpg'}]"
提取步骤与代码实现
以下是基于Python的实用实现方案,兼顾安全性与稳定性:
解析字符串为原生Python对象
不要用eval()(存在代码注入风险),改用ast.literal_eval()将字符串转为可操作的列表字典结构。筛选导演条目并提取姓名
遍历解析后的列表,匹配job字段为'Director'的条目,提取对应的name值。若存在多位导演,可按需返回列表或拼接字符串。
完整代码示例(以Pandas数据集为例)
import ast import pandas as pd # 假设dataset是你的Pandas DataFrame def extract_director_names(crew_str): try: # 解析字符串为列表 crew_list = ast.literal_eval(crew_str) # 筛选所有导演并提取姓名 directors = [member['name'] for member in crew_list if member.get('job') == 'Director'] # 单导演返回字符串,多导演用逗号拼接,无导演返回None return ', '.join(directors) if directors else None except (SyntaxError, TypeError, KeyError): # 处理解析失败、格式错误或字段缺失的情况 return None # 将提取结果新增为数据集的一列 dataset['director_names'] = dataset['crew'].apply(extract_director_names)
核心逻辑说明
ast.literal_eval():仅解析合法的Python字面量结构,避免恶意代码执行风险。- 列表推导式:快速遍历筛选目标条目,代码简洁高效。
- 异常捕获:覆盖解析失败、字段缺失等场景,避免程序崩溃。
特殊情况处理
- 字段为空/格式错误:函数返回
None,可后续用dataset['director_names'].fillna('未知')统一处理空值。 - 多位导演:默认用
,拼接成字符串,若需保留列表格式,直接返回directors即可。
内容的提问来源于stack exchange,提问作者Biprajit Namasudra
相关产品推荐
相关产品推荐

