如何在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
相关产品推荐
相关产品推荐

