我有两个单词列表,我希望将它们结合在一起。我在下面尝试了以下方法,但到目前为止没有成功。
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:无法散列的类型:“列表”
答案 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'}
希望有帮助!