pandas数据合并:详解内连接(交集)与外连接(并集)

许南星
许南星
发布时间:2026-10-13| 1人浏览过
原创

本文深入解析pandas中merge函数的默认行为及参数控制。默认merge执行内连接(inner),仅保留键的交集;通过设置how='outer'可执行外连接(outer),保留所有键并填充NaN。文章通过具体代码示例展示了如何处理键值匹配、笛卡尔积扩展及缺失值填补,帮助开发者掌握不同场景下的数据合并策略。

在数据处理领域,合并多个数据集是常见操作,其中基于键(key)的交集与并集求取是最核心的两种模式。回顾pandas库中merge功能的默认行为,可以发现其默认执行的是内连接(inner join),即仅保留两个数据集中共同存在的键记录,这本质上是一种求取交集的操作。

为了直观展示这一过程,我们首先定义两个示例数据集:df1包含data1列和key列,df2包含data2列和key列。具体数据内容如下所示:

In [26]: df1
Out[26]: 
 data1 key
0  0 b
1  1 b
2  2 a
3  3 c
4  4 a
5  5 a
6  6 b
In [27]: df2
Out[27]: 
 data2 key
0  0 a
1  1 b
2  2 d
3  3 b

执行默认的pd.merge(df1, df2)操作后,得到的结果集仅包含key列中同时存在于df1和df2中的值(即'a'和'b')。值得注意的是,虽然键(key)进行了交集筛选,但对应的数据列(data1和data2)进行了合并。这种设计符合逻辑,因为如果仅仅筛选交集而不合并数据,就失去了“数据合并”的意义。

In [28]: pd.merge(df1,df2)
Out[28]: 
 data1 key data2
0  0 b  1
1  0 b  3
2  1 b  1
3  1 b  3
4  6 b  1
5  6 b  3
6  2 a  0
7  4 a  0
8  5 a  0

上述结果清晰地表明,merge默认行为是对key求交集,同时对非键列进行并集式的合并。如果仅求交集而不进行数据合并,则无法体现数据关联的价值。

接下来,我们显式指定how='inner'参数,以验证显式内连接与默认行为的一致性。代码如下:

In [29]: pd.merge(df1,df2,how='inner')
Out[29]: 
 data1 key data2
0  0 b  1
1  0 b  3
2  1 b  1
3  1 b  3
4  6 b  1
5  6 b  3
6  2 a  0
7  4 a  0
8  5 a  0
In [30]: result_inner = pd.merge(df1,df2,how='inner')
In [31]: result_default = pd.merge(df1,df2)
In [32]: result_inner == result_default
Out[32]: 
 data1 key data2
0 True True True
1 True True True
2 True True True
3 True True True
4 True True True
5 True True True
6 True True True
7 True True True
8 True True True

对比结果显示,显式指定how='inner'的结果与不指定参数(默认行为)的结果完全一致。这证实了pandas中merge函数默认即为内连接模式。

若希望保留两个数据集中所有的键(即求取并集),需要指定how='outer'参数进行外连接。示例代码如下:

In [35]: result_outer = pd.merge(df1,df2,how='outer')
In [36]: result_outer
Out[36]: 
 data1 key data2
0  0.0 b 1.0
1  0.0 b 3.0
2  1.0 b 1.0
3  1.0 b 3.0
4  6.0 b 1.0
5  6.0 b 3.0
6  2.0 a 0.0
7  4.0 a 0.0
8  5.0 a 0.0
9  3.0 c NaN
10 NaN d 2.0

执行外连接后,结果集中的key列包含了df1和df2中出现的所有唯一键值。对于在其中一个数据集中缺失的记录,pandas会自动使用NaN(Not a Number)进行填充,以确保所有键都能被保留。

此外,还需注意合并后数据行的数量变化。当两个数据集通过key进行连接时,结果集的行数取决于key值的匹配情况。如果存在一对多或多对多的匹配关系,结果集的行数将是两组数据中匹配key数量的笛卡尔积。对于无法匹配的键,另一侧数据将生成NaN对象以维持结构完整。

以上关于pandas数据合并中内连接(交集)与外连接(并集)的机制解析完毕。希望这些示例能帮助读者更好地理解merge函数的行为,并在实际开发中灵活运用。欢迎收藏并支持本站获取更多技术分享。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。