替换genre_ids列数字ID为对应类型名称失败如何解决?
实现genre_ids数字ID到类型名称的映射替换
首先先构建ID和类型名的对应映射字典,你可以根据自己的实际对应规则补全所有键值对:
# 示例映射规则,可自行增删调整 genre_map = { 28: "action", 12: "adventure", 16: "animation", 35: "comedy", 80: "crime", 99: "documentary", 18: "drama", 10751: "family", 14: "fantasy", 36: "history", 27: "horror", 10402: "music", 9648: "mystery", 10749: "romance", 878: "science fiction", 10770: "tv movie", 53: "thriller", 10752: "war", 37: "western" }
根据你genre_ids列的存储格式,选对应的处理方法即可:
- 若列中每行是单个数字ID:直接用pandas的replace方法完成替换,注意保证字典key的类型和列中ID的类型一致(如果列中ID是字符串格式,就把字典key改成对应的字符串,比如
"28": "action")
import pandas as pd # 假设你的数据集DataFrame变量名为df df["genre_name"] = df["genre_ids"].replace(genre_map)
- 若列中每行是ID组成的列表(比如
[28, 12, 878]这种单条数据对应多个类型的格式,也是影视类数据集最常见的存储形式):需要遍历列表内的每个ID做映射,直接用replace无法生效
# 映射后得到类型名称组成的列表,找不到对应映射的ID会标记为unknown df["genre_names"] = df["genre_ids"].apply(lambda id_list: [genre_map.get(gid, "unknown") for gid in id_list])
常见坑点:如果你的
genre_ids列存的是字符串格式的列表(比如打印出来是"[28, 12]"的字符串,而非原生Python列表),要先做格式转换再执行映射,转换代码如下:import ast df["genre_ids"] = df["genre_ids"].apply(ast.literal_eval)如果替换后出现大量
unknown,先检查ID的数据类型是否和映射字典的key类型匹配(数字型ID和字符串型ID不会被识别为同一个key),再补全缺失的映射关系即可。
内容的提问来源于stack exchange,提问作者Nicole S
相关产品推荐
相关产品推荐

