转换Dataframe列以解析TypeError无法哈希

2024-09-26 22:51:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

与其使用不同的方法来解决问题,不如如何将dataframe列转换为可以散列的内容?或者,如果这是不可能的,为什么你必须使用另一种方法?在

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'

Tags: 方法typelistcol2seriespddf2print
2条回答

你的coursesFilter已经是一个列表对象,不需要add[]

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

我认为需要删除[]

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

输入^{}参数:

values : set or list-like

The sequence of values to test. Passing in a single string will raise a TypeError. Instead, turn a single string into a list of one element.

相关问题 更多 >

    热门问题