如何将DataFrame中的演员名称转换为唯一数字标识?
演员名称转唯一数字映射方案
核心思路
用pandas内置的向量化操作快速生成演员与唯一数字的映射,同时构建反向查询字典,替代低效的循环列表实现。
步骤与代码示例
假设你的DataFrame名为df,其中actor列存储演员名称,movie列存储电影名称:
提取所有唯一演员
从DataFrame中获取不重复的演员列表,作为生成映射的基础:unique_actors = df['actor'].unique()创建正向映射字典(演员→数字)
通过枚举给每个唯一演员分配专属数字(示例从1开始编号,可按需改为从0开始):actor_to_id = {actor: idx + 1 for idx, actor in enumerate(unique_actors)}转换DataFrame中的演员列
将原演员名称替换为对应数字,重复演员会自动映射到同一编号:df['actor_id'] = df['actor'].map(actor_to_id)生成反向查询字典(数字→演员)
反转正向字典,方便后续通过数字查询对应演员:id_to_actor = {v: k for k, v in actor_to_id.items()}
特殊情况处理(演员列为列表)
如果actor列是单部电影对应多个演员的列表格式,先展开列表再提取唯一演员:
# 展开列表,将每个演员单独成行 exploded_df = df.explode('actor') unique_actors = exploded_df['actor'].unique() # 后续映射步骤与上述一致
用于NetworkX绘图
转换完成后,用actor_id和movie作为节点构建图,避免因名称过长导致图形混乱:
import networkx as nx G = nx.Graph() # 添加电影和演员节点 G.add_nodes_from(df['movie'], node_type='movie') G.add_nodes_from(df['actor_id'], node_type='actor') # 添加电影-演员关联边 edges = list(zip(df['movie'], df['actor_id'])) G.add_edges_from(edges) # 按需调整绘图参数 nx.draw(G, with_labels=True, node_size=500, font_size=8)
内容的提问来源于stack exchange,提问作者Berk Ak
相关产品推荐
相关产品推荐

