Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 合并列表列失败_Python_List_Pandas_Merge_Multiple Columns - Fatal编程技术网

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