pandas:在多列上合并(连接)两个数据框

2025-02-12 10:03:00
admin
原创
58
摘要:问题描述:我正在尝试使用两列连接两个熊猫数据框: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.In...

问题描述:

我正在尝试使用两列连接两个熊猫数据框:

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

知道正确的做法是什么吗?


解决方案 1:

尝试一下

new_df = pd.merge(
    left=A_df, 
    right=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 文档的向量/向量列表中加入

解决方案 2:

  1. 它按照left_on和的顺序进行合并right_on,即 的第 i 个元素left_on将与 的第 i 个元素匹配right_on

下面的例子中,上面的代码A_col1B_col1A_col2匹配B_col2,而下面的代码A_col1B_col2A_col2匹配B_col1。显然,结果是不同的。

res1

  1. 从上面的示例可以看出,如果合并键具有不同的名称,则所有键都将在合并的数据框中显示为各自的列。在上面的示例中,在顶部数据框中,A_col1B_col1是相同的,并且A_col2B_col2是相同的。在底部数据框中,A_col1B_col2是相同的,并且A_col2B_col1是相同的。由于这些是重复的列,因此很可能不需要它们。从一开始就避免出现此问题的一种方法是从一开始就使合并键相同。请参阅下面的要点 #3。

  2. 如果left_onright_on相同col1col2,我们可以使用on=['col1', 'col2']。在这种情况下,没有重复的合并键。

df1.merge(df2, on=['col1', 'col2'])

res3

  1. 您还可以根据列名合并一侧,根据索引合并另一侧。例如,在下面的示例中,df1的列与df2的索引匹配。如果索引已命名(如下例所示),则您可以按名称引用它们,但如果没有,您也可以使用right_index=True(或者left_index=True如果左侧数据框是根据索引合并的数据框)。

df1.merge(df2, left_on=['A_col1', 'A_col2'], right_index=True)
# or
df1.merge(df2, left_on=['A_col1', 'A_col2'], right_on=['B_col1', 'B_col2'])

res3

  1. 通过使用参数,您还how=可以执行LEFT JOINhow='left')、FULL OUTER JOINhow='outer')和RIGHT JOIN( )。如上例所示,默认值为( )。how='right'`INNER JOIN`how='inner'

  2. 如果您有 2 个以上的数据框需要合并,并且所有数据框的合并键都相同,则join方法比 更有效,merge因为您可以传递数据框列表并加入索引。请注意,以下示例中所有数据框的索引名称都相同(col1col2)。请注意,索引不必有名称;如果索引没有名称,则多索引的数量必须匹配(在下面的情况下有 2 个多索引)。同样,如要点 #1 中所述,匹配根据索引的顺序进行。

df1.join([df2, df3], how='inner').reset_index()

res4

解决方案 3:

简短易懂:

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

解决方案 4:

另一种方法:

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

解决方案 5:

这里的问题是,通过使用撇号,您将传递的值设置为字符串,而事实上,正如@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'])

解决方案 6:

这对我有用,适用于 n 个文件 xls

# all_reports_paths contain one array with all paths per files
for a in all_reports_paths:
    
    df.append( pd.read_excel(a,skiprows=X,skipfooter=X))

df_glob = pd.DataFrame(columns=columns)

for dataframe in df:

    df_glob = pd.concat([df_glob,pd.DataFrame(dataframe)],axis=0)

# finally df_glob contain all data
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用