pandas panda:合并(联接)多列上的两个数据框

mnemlml8  于 2022-11-05  发布在  其他
关注(0)|答案(5)|浏览(160)

我尝试使用两列连接两个Pandas数据框:

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]'

你知道怎么做才是正确的吗?谢谢!

voj3qocg

voj3qocg1#

试试这个

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或每个left_on文档的向量/向量列表中加入

a1o7rhls

a1o7rhls2#

这里的问题是,通过使用撇号,你将传递的值设置为一个字符串,而事实上,正如@Shijo在文档中所声明的,函数期望的是一个标签或列表,而不是一个字符串!如果列表包含了传递给左 Dataframe 和右 Dataframe 的每个列的名称,那么每个column-name * 必须 * 单独地位于撇号内。根据以上所述,我们可以理解为什么这是不正确的:

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'])
s71maibg

s71maibg3#

另一种方法是:

new_df = A_df.merge(B_df, left_on=['A_c1','c2'], right_on = ['B_c1','c2'], how='left')
exdqitrt

exdqitrt4#

您可以使用以下简短易懂的语句:

merged_data= df1.merge(df2, on=["column1","column2"])
41zrol4v

41zrol4v5#

这对我来说很有用,对于n个文件xls

all_reports_paths包含一个数组,其中包含每个文件的所有路径

对于所有报告路径中的:
(pd.reada,跳过行=X,跳过页脚=X))
df_glob = pd. Dataframe (列=列)
对于df中的 Dataframe :
Dataframe ( Dataframe ),轴=0)

finally df_glob包含所有数据

相关问题