我试图加入两个熊猫数据框架使用两列:
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
但得到了以下错误:
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4164)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4028)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13166)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13120)()
KeyError: '[B_1, c2]'
你知道正确的方法是什么吗?
这里的问题是,通过使用撇号,您正在将传递的值设置为字符串,而实际上,正如文档中@Shijo所述,该函数期望的是标签或列表,而不是字符串!如果列表包含为左右数据框架传递的每个列名,则每个列名必须单独在撇号中。根据上面所说的,我们可以理解为什么这是不正确的:
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
下面是正确使用函数的方法:
new_df = pd.merge(A_df, B_df, how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])
试试这个
new_df = pd.merge(A_df, B_df, how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html
left_on:标签或列表,或数组类的字段名,以左侧连接
DataFrame。可以是向量的长度或向量的列表
DataFrame使用特定的向量作为连接键,而不是
列
right_on:标签或列表,或要加入的类似数组的字段名
在右DataFrame或vector/ vector列表中每left_on文档