You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Pandas中如何连接无相同列的多个DataFrame?含三表场景

在Pandas中连接三个列不完全相同的DataFrame

当然没问题啦!在Pandas里连接这种列不完全一致的多个DataFrame完全可行,我结合你说的场景(a和b有共同列、b和c有共同列)给你拆解清楚具体做法~

一、横向合并(基于共同列关联,类似SQL JOIN)

这种场景下咱们可以一步步两两合并:先把a和b合并好,再把合并后的结果和c合并就行,核心用pd.merge()方法搞定。

先搞几个示例DataFrame方便演示:

import pandas as pd

# DataFrame a:包含id、name、age列
a = pd.DataFrame({
    'id': [1, 2, 3],
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35]
})

# DataFrame b:和a共享id列,新增city、salary列
b = pd.DataFrame({
    'id': [1, 2, 4],
    'city': ['New York', 'London', 'Paris'],
    'salary': [5000, 6000, 7000]
})

# DataFrame c:和b共享id列,新增job、experience列
c = pd.DataFrame({
    'id': [1, 3, 4],
    'job': ['Engineer', 'Teacher', 'Designer'],
    'experience': [5, 8, 3]
})

第一步:合并a和b

咱们基于共同的id列合并,默认是内连接(只保留两边都有的id),你也可以用how参数指定左/右/外连接,比如要保留所有id的话就用how='outer':

ab_merged = pd.merge(a, b, on='id', how='outer')

第二步:把合并结果和c再合并

同样基于id列,这里我用外连接来保留所有存在的id数据:

final_merged = pd.merge(ab_merged, c, on='id', how='outer')

合并后的结果会包含三个DataFrame的所有列,缺失的数据会自动用NaN填充,完美保留所有关联关系~

二、纵向拼接(按行堆叠,类似SQL UNION)

如果你的需求是把三个DataFrame按行堆起来(不管列一不一致),直接用pd.concat()就行,它会自动对齐列,缺的列填NaN。

示例代码:

final_concat = pd.concat([a, b, c], ignore_index=True)
  • ignore_index=True是用来重置行索引的,避免原索引重复混乱;
  • 如果只想保留三个DataFrame都有的列,加个join='inner'参数就行:
final_concat_inner = pd.concat([a, b, c], ignore_index=True, join='inner')

这样结果就只会保留三个表都有的id列啦。

几个实用小提醒

  • 合并时要明确连接键:如果有多个共同列,可以传列名列表,比如on=['id', 'name'];
  • 选对连接类型:根据需求选内连接(只留交集)、左/右连接(保留某一边全部数据)或外连接(保留所有数据);
  • 处理重复列名:如果合并后出现重名列(比如a和b有同名但不同含义的列),用suffixes参数区分,比如pd.merge(a, b, on='id', suffixes=('_from_a', '_from_b'))。

内容的提问来源于stack exchange,提问作者anurag pandey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:14:53