You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:23:20