【问题标题】:Convert Dataframe column to resolve TypeError Cannot be hashed转换 Dataframe 列以解决 TypeError 无法散列
【发布时间】:2018-03-07 22:24:55
【问题描述】:

这个问题已经在 SO 上被问过很多次了,但在每种情况下,我发现答案总是改变 OP 的代码,以不同的方式获得正确的结果。 ExampleExample

您如何将数据框列转换为可以散列的东西,而不是使用不同的方法来解决问题?或者,如果这不可能,为什么还要使用其他方法?

import pandas as pd

d = {'name':['bil','bil','bil','jim'],
     'col2': ['acct','law', 'acct2','law'],
     'col3': [1,2,3,55],
     'col4': [1,1,1,2]

    }
df2 = pd.DataFrame(data=d)
coursesFilter=['acct']

print(df2[df2['col2'].isin([coursesFilter])]) #TypeError: unhashable type: 'list'
print(df2[df2['col2'].isin([pd.Series(coursesFilter)])]) #TypeError: 'Series' objects are mutable, thus they cannot be hashed
print(df2[df2['col2'].isin([pd.Series(coursesFilter).tolist()])]) #TypeError: unhashable type: 'list'

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    我认为需要删除[]:

    print(df2[df2['col2'].isin(coursesFilter)])
    print(df2[df2['col2'].isin(pd.Series(coursesFilter))])
    print(df2[df2['col2'].isin(pd.Series(coursesFilter).tolist())])
    

    输入Series.isin参数:

    值:设置或类似列表

    要测试的值序列。传入单个字符串将引发 TypeError。相反,将单个字符串转换为一个元素的列表。

    【讨论】:

      【解决方案2】:

      你的课程过滤器已经是一个列表对象,不需要添加[]

      df2[df2['col2'].isin(coursesFilter)]
      Out[410]: 
         col2  col3  col4 name
      0  acct     1     1  bil
      

      【讨论】:

        猜你喜欢
        • 2018-12-26
        • 2022-12-05
        • 2020-06-26
        • 1970-01-01
        • 2013-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多