替换genre_ids时出现KeyError: '['错误,求解决方法
解决KeyError: '['问题
问题原因
你的genre_ids列存储的不是Python列表,而是字符串格式的列表(比如值为"[28,16]")。直接遍历这个字符串时,会把它拆成单个字符('['、'2'、'8'等),而你的id_code字典里没有'['这个键,所以触发KeyError。
解决方案
方法1:用ast.literal_eval解析字符串为列表
先把字符串格式的列表转换成真正的Python列表,再映射类型名称:
import ast id_code = {'28': 'action', '12': 'adventure', '16': 'animation'} merged_df['genre_ids'] = merged_df['genre_ids'].apply( lambda x: [id_code[str(i)] for i in ast.literal_eval(x)] )
ast.literal_eval会安全地把字符串解析成对应的Python数据结构(这里是列表)- 把列表里的数字转成字符串,匹配
id_code的键类型
方法2:纯字符串处理(无需额外模块)
如果你的字符串格式很规范(比如没有多余空格),可以直接处理字符串:
id_code = {'28': 'action', '12': 'adventure', '16': 'animation'} merged_df['genre_ids'] = merged_df['genre_ids'].apply( lambda x: [id_code[i.strip()] for i in x.strip('[]').split(',')] )
x.strip('[]')去掉字符串首尾的[],得到"28,16"split(',')按逗号分割成["28", "16"]i.strip()处理可能存在的空格(比如如果是"28, 16")
可选:处理未知ID
如果列中有不在id_code里的ID,可以用get方法设置默认值,避免报错:
# 以方法1为例 merged_df['genre_ids'] = merged_df['genre_ids'].apply( lambda x: [id_code.get(str(i), 'unknown') for i in ast.literal_eval(x)] )
内容的提问来源于stack exchange,提问作者nv555
相关产品推荐
相关产品推荐

