如何修复Python中‘Unhashable type: 'Series'’错误?
修复"unhashable type: 'Series'"错误
你写的代码如下:
flag = {'No': 0, 'N': 0, 'Y': 1, 'Yes': 1} New_Product_Launch = flag[ final_input_optimization[ (final_input_optimization['Brand'] == Campaign_Details.iloc[0]['Brand']) & (final_input_optimization['Banner'].isin([banner, banner_1])) ]['NPD Flag'] ]
运行时触发错误:
Error: unhashable type: 'Series'
问题原因
你筛选后拿到的final_input_optimization['NPD Flag']是一个Pandas Series对象,而字典的键必须是字符串、数字这类可哈希的类型,Series属于不可哈希的容器,直接拿它当字典键就会报错。
修复方案
场景1:筛选结果只有1条数据
如果你的筛选条件只会返回唯一一行数据,直接用.iloc[0]提取Series里的单个值作为键:
flag = {'No': 0, 'N': 0, 'Y': 1, 'Yes': 1} # 先拿到筛选后的单个NPD Flag值 npd_flag = final_input_optimization[ (final_input_optimization['Brand'] == Campaign_Details.iloc[0]['Brand']) & (final_input_optimization['Banner'].isin([banner, banner_1])) ]['NPD Flag'].iloc[0] New_Product_Launch = flag[npd_flag]
场景2:筛选结果有多条数据
如果筛选后返回多行数据,用map方法批量把Series里的每个值映射成对应的flag值,得到一个新的Series:
flag = {'No': 0, 'N': 0, 'Y': 1, 'Yes': 1} # 对筛选后的所有NPD Flag值做批量映射 New_Product_Launch = final_input_optimization[ (final_input_optimization['Brand'] == Campaign_Details.iloc[0]['Brand']) & (final_input_optimization['Banner'].isin([banner, banner_1])) ]['NPD Flag'].map(flag)
额外优化:处理缺失值
如果NPD Flag列存在空值,建议先填充默认值避免KeyError:
# 场景1的缺失值处理 npd_flag = final_input_optimization[ (final_input_optimization['Brand'] == Campaign_Details.iloc[0]['Brand']) & (final_input_optimization['Banner'].isin([banner, banner_1])) ]['NPD Flag'].fillna('No').iloc[0] # 场景2的缺失值处理 New_Product_Launch = final_input_optimization[ (final_input_optimization['Brand'] == Campaign_Details.iloc[0]['Brand']) & (final_input_optimization['Banner'].isin([banner, banner_1])) ]['NPD Flag'].fillna('No').map(flag)
内容的提问来源于stack exchange,提问作者Mihika Malhotra
相关产品推荐
相关产品推荐

