不可散列的类型:单词列表中的“列表”

时间:2019-05-16 22:04:38

标签: python list dataframe hash tuples

我有两个单词列表,我希望将它们结合在一起。我在下面尝试了以下方法,但到目前为止没有成功。

bowA = df["Lang_1_text"].str.split(" ") 
bowB = df["Lang_2_text"].str.split(" ") 
print(bowA)
>>>[strike, kirsten, chlodowski, file, exchange]
print(bowB)
>>> [kirsten, exchange, outlook, freeze ]

预期结果:

wordSet = set(bowA).union(set(bowB))

print(wordSet)
>>>[strike, kirsten, chlodowski, file, exchange, outlook, freeze]

实际结果:

TypeError跟踪(最近一次通话)     在     wordSet = set(bowA).union(set(bowB))     TypeError:无法散列的类型:“列表”

2 个答案:

答案 0 :(得分:0)

某些事情没有加起来。这段代码对我有用:

bowA = ['strike', 'kirsten', 'chlodowski', 'file', 'exchange']
bowB = ['kirsten', 'exchange', 'outlook', 'freeze']

wordSet = set(bowA).union(set(bowB))
print(wordSet)

尽管您通常可以通过元组广播列表修复不可散列的类型错误,但由于散列性在这里并不重要,因此存在某种断开连接。

答案 1 :(得分:0)

这是因为当您这样做:

bowA = df["Lang_1_text"].str.split(" ") 
bowB = df["Lang_2_text"].str.split(" ") 

bowA和bowB将是一个Series对象。 您可以通过打印进行验证。如下所示:

>> type(bowA)
>> pandas.core.series.Series
>> type(bowA[0])
>> list

系列中的每个元素都将是一个列表。当您将其强制转换为set()时,它将引发TypeError。 示例:

>> set([1,2,3]) # runs fine
>> set([[1],2,3]) # will raise the same error - TypeError: unhashable type: 'list'

您可能应该执行以下操作:

>> data = {"Lang_1_text": ['strike kirsten chlodowski file exchange'], "Lang_2_text": ['kirsten exchange outlook freeze']} 
>> df = pd.DataFrame(data) # Assuming `df` is the format you have 
>> # Now split it on space " "; and cast them as `set()` you can user `applymap`
>> # https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.applymap.html
>> data_1 = df.applymap(lambda x: set(x.split(" ")))
>> # Calculate the `union` data
>> union_data = data_1.apply(lambda x: x['Lang_1_text'].union(x['Lang_2_text']), axis=1)
>> print union_data.values[0]  # Or list(union_data.values[0]) to make it a list
>> {'chlodowski', 'exchange', 'file', 'freeze', 'kirsten', 'outlook', 'strike'}

希望有帮助!

相关问题