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

如何在Pandas中比较不同列的变量?遇TypeError报错求助

问题原因及解决办法

错误原因

你遇到的TypeError: unhashable type: 'Series'是因为:

  • 你试图把三个pandas Series对象(df['Entry']、df['Middle']、df['Exit'])放进集合{}里,但Series属于不可哈希的对象,集合要求元素必须可哈希,所以触发报错。
  • 同时原代码逻辑有误:你实际想检查变量值是否存在于三列的元素中,但原代码是在判断变量是否等于这三个Series本身,完全偏离需求。

解决步骤

正确实现:提取所有列值到可哈希集合

把DataFrame三列的所有值提取出来转成Python集合(集合元素为可哈希的字符串),再检查变量是否在这个集合内。

修改后的完整代码:

import pandas as pd
df = pd.DataFrame(columns=['Entry','Middle','Exit'])
entry_value = '17.98'
middle_value = '12.16'
exit_value = '1.2'
df = df.append({'Entry' : entry_value , 'Middle' : middle_value, 'Exit' : exit_value}, ignore_index = True)
entry_value = '19.98'
middle_value = '192.16'
exit_value = '1.1'

# 提取所有列的数值并转成集合
all_values = set(df.values.flatten())

if entry_value in all_values:
    print('entry')
elif middle_value in all_values:
    print('middle')
elif exit_value in all_values:
    print('exit')
else:
    print('wawo')

代码说明

  • df.values.flatten():将DataFrame的二维数据结构转为一维数组,包含所有列的所有数值。
  • set(...):把一维数组转为集合,既解决了不可哈希的问题,还能快速判断元素是否存在。

即使后续DataFrame添加更多行,这个方法也能覆盖所有行的数值,不会遗漏。

内容的提问来源于stack exchange,提问作者khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:10:54