Python 合并列表列失败
样本: 我尝试按列Python 合并列表列失败,python,list,pandas,merge,multiple-columns,Python,List,Pandas,Merge,Multiple Columns,样本: 我尝试按列b与lists合并: df1 = pd.DataFrame({'a':list('ab'), 'b':[[1,2],[4,5]]}) print (df1) a b 0 a [1, 2] 1 b [4, 5] df2 = pd.DataFrame({'c':list('cd'), 'b':[[1,7],[4,5]]}) print (df2) b c 0 [1, 7] c 1 [4, 5] d TypeError:在*之后
b
与list
s合并:
df1 = pd.DataFrame({'a':list('ab'), 'b':[[1,2],[4,5]]})
print (df1)
a b
0 a [1, 2]
1 b [4, 5]
df2 = pd.DataFrame({'c':list('cd'), 'b':[[1,7],[4,5]]})
print (df2)
b c
0 [1, 7] c
1 [4, 5] d
TypeError:在*之后的type对象参数必须是序列,而不是映射
我找到了将列转换为元组的解决方案:
df = pd.merge(df1, df2, on='b')
但是为什么
合并与列表的列失败了?我不确定,但似乎使用dict而不是列表,例如:
df1['b'] = df1['b'].apply(tuple)
df2['b'] = df2['b'].apply(tuple)
df = pd.merge(df1, df2, on='b')
print (df)
a b c
0 b (4, 5) d
或设置:
df1 = pd.DataFrame({'a':list('ab'), 'b':[{1:2},{4:5}]})
df2 = pd.DataFrame({'c':list('cd'), 'b':[{1:7},{4:5}]})
您将得到相同的错误
因此,我认为与列表
列合并失败,因为当我在python3.6中尝试您的示例时,列是可变的,而tuble
列不是
df1 = pd.DataFrame({'a':list('ab'), 'b':[{1,2},{4,5}]})
df2 = pd.DataFrame({'c':list('cd'), 'b':[{1,7},{4,5}]})
我得到了(最后的)错误
因为对于合并,要合并的列需要是可散列的。
如果尝试散列其中一个值,则会出现相同的错误
TypeError: unhashable type: 'list'
将值转换为元组使它们可以散列
hash([1,7])
这就是为什么不能将列与列表合并。没有散列。谢谢您的回答,您认为这是每种设计吗?@jezrael将整个df转换为小写的有效方法是什么?@pyd-不太容易,所有列都是字符串df=df.stack().str.lower().unstack()
。
hash([1,7])
print(hash((1,7)))
1303117175