跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI

Pandas 数据合并与拼接:merge、join 与 concat 详解

Pandas 提供了 merge、join 和 concat 三种核心方法用于数据合并。merge 基于列进行连接,支持内、外、左、右连接;join 基于索引连接;concat 用于行或列的直接堆叠。详细解析了各方法的参数、使用场景及代码示例,帮助开发者高效处理 DataFrame 数据整合任务。

刀狂发布于 2025/2/6更新于 2026/9/1061 浏览
Pandas 数据合并与拼接:merge、join 与 concat 详解

Pandas 数据合并与拼接详解

Pandas 提供了 merge、join 和 concat 三种核心方法用于数据的合并与拼接。merge 方法主要基于两个 DataFrame 的共同列进行合并;join 方法主要基于两个 DataFrame 的索引进行合并;concat 方法是对 Series 或 DataFrame 进行行拼接或列拼接。

1. Merge 方法

Pandas 的 merge 方法是基于共同列,将两个 DataFrame 连接起来。merge 方法的主要参数如下:

  • left/right:左/右位置的 DataFrame。
  • how:数据合并的方式。
    • left:基于左 DataFrame 列的数据合并。
    • right:基于右 DataFrame 列的数据合并。
    • outer:基于列的数据外合并(取并集)。
    • inner:基于列的数据内合并(取交集),默认为 'inner'。
  • on:用来合并的列名,这个参数需要保证两个 DataFrame 有相同的列名。
  • left_on/right_on:左/右 DataFrame 合并的列名,也可为索引,数组和列表。
  • left_index/right_index:是否以 index 作为数据合并的列名,True 表示是。
  • sort:根据 DataFrame 合并的 keys 排序,默认是。
  • suffixes:若有相同列且该列没有作为合并的列,可通过 suffixes 设置该列的后缀名,一般为元组和列表类型。

1.1 内连接 (Inner Join)

how='inner',DataFrame 的链接方式为内连接,我们可以理解基于共同列的交集进行连接,参数 on 设置连接的共有列名。

import pandas as pd
import numpy as np

# 定义 df1
df1 = pd.DataFrame({ 
    'alpha':['A','B','B','C','D','E'],
    'feature1':[1,1,2,3,3,1],
    'feature2':['low','medium','medium','high','low','high']})

# 定义 df2
df2 = pd.DataFrame({ 
    'alpha':['A','A','B','F'],
    'pazham':['apple','orange','pine','pear'],
    'kilo':['high','low','high','medium'],
    'price':np.array([5,6,5,7])})

# 基于共同列 alpha 的内连接
df3 = pd.merge(df1, df2, how='inner', on='alpha')
print(df3)

执行结果仅保留 alpha 列在两个表中都存在的行(即 A 和 B)。

1.2 外连接 (Outer Join)

how='outer',DataFrame 的链接方式为外连接,我们可以理解基于共同列的并集进行连接,参数 on 设置连接的共有列名。

# 基于共同列 alpha 的外连接
df4 = pd.merge(df1, df2, how='outer', on='alpha')
print(df4)

若两个 DataFrame 间除了 on 设置的连接列外并无相同列,则该列的值置为 NaN。此操作会保留所有行,缺失值填充为 NaN。

1.3 左连接与右连接

  • 左连接 (how='left'):返回左表的所有记录,如果右表中没有匹配的记录,则结果为 NaN。
  • 右连接 (how='right'):返回右表的所有记录,如果左表中没有匹配的记录,则结果为 NaN。
# 左连接
df_left = pd.merge(df1, df2, how='left', on='alpha')

# 右连接
df_right = pd.merge(df1, df2, how='right', on='alpha')

2. Join 方法

join 方法主要基于两个 DataFrame 的索引进行合并。它通常用于将具有不同列但共享索引的表连接在一起。

# 创建带有不同索引的 DataFrame
df_a = pd.DataFrame({'A': [1, 2]}, index=['x', 'y'])
df_b = pd.DataFrame({'B': [3, 4]}, index=['y', 'z'])

# 基于索引的 join (默认 left join)
df_join = df_a.join(df_b, how='outer')
print(df_join)

join 的参数与 merge 类似,支持 how 参数指定连接方式(inner, outer, left, right),默认使用左连接。

3. Concat 方法

concat 方法是对 Series 或 DataFrame 进行行拼接或列拼接。它主要用于将多个对象沿某个轴堆叠在一起。

3.1 行拼接

# 行拼接 (axis=0 默认)
df_concat_row = pd.concat([df1, df2], axis=0)

这会简单地将两个 DataFrame 的行上下堆叠。如果列名不一致,缺失部分会填充 NaN。

3.2 列拼接

# 列拼接 (axis=1)
df_concat_col = pd.concat([df1, df2], axis=1)

这会将 DataFrame 左右并排。适用于增加新特征列的场景。

4. 总结

  • Merge:适合基于特定列键值的复杂关系型数据库式连接,支持多列连接。
  • Join:适合基于索引的连接,语法更简洁,常用于时间序列数据对齐。
  • Concat:适合简单的堆叠操作,不涉及键值匹配,性能通常优于 merge。

在实际数据处理中,应根据数据结构和分析需求选择合适的方法。注意处理重复索引、列名冲突以及内存优化问题。

目录

  1. Pandas 数据合并与拼接详解
  2. 1. Merge 方法
  3. 1.1 内连接 (Inner Join)
  4. 定义 df1
  5. 定义 df2
  6. 基于共同列 alpha 的内连接
  7. 1.2 外连接 (Outer Join)
  8. 基于共同列 alpha 的外连接
  9. 1.3 左连接与右连接
  10. 左连接
  11. 右连接
  12. 2. Join 方法
  13. 创建带有不同索引的 DataFrame
  14. 基于索引的 join (默认 left join)
  15. 3. Concat 方法
  16. 3.1 行拼接
  17. 行拼接 (axis=0 默认)
  18. 3.2 列拼接
  19. 列拼接 (axis=1)
  20. 4. 总结

更多推荐文章

查看全部
  • 基于边缘计算的机器人梯控系统多机并发调度与死锁解决方案
  • VS Code 中 GitHub Copilot 无法使用的关键排查与修复步骤
  • AIGC 时代的网络安全威胁与应急响应机制构建
  • DeepSeek-R1-Distill-Qwen-1.5B 本地部署:vLLM+Open-WebUI 环境搭建
  • Digital Micrograph 安装指南
  • 特定领域大模型应用:RAG 与微调流程指南及农业案例研究
  • CCF-GESP 2025 年 6 月 C++ 二级真题解析
  • Java 8 ConcurrentHashMap 源码深度剖析
  • OpenClaw 在 Linux/Ubuntu 上的安装与部署实战
  • IntelliJ IDEA 集成 GitHub Copilot 安装配置与实战技巧
  • Python 盲水印工具 BlindWaterMark 使用指南
  • OpenClaw 多端交互实测指南:Web/TUI/钉钉集成配置
  • 【AIGC】COT思维链:让AI学会拆解问题,像人一样思考
  • VSCode Cline 配置 ChatGPT Plus 与 GitHub Copilot 模型教程
  • 基于 A 星算法的多无人机与移动机器人协同路径规划
  • Linux TCP 服务器开发:从 Echo 到远程命令执行的并发与安全
  • Java 集成高德开放平台 POI 搜索 API 实战
  • C++ 平面图算法设计与实现详解
  • GitHub 国内镜像站汇总与加速配置实战
  • ToDesk ToClaw 评测:封装 OpenClaw 能力的云端 AI 自动化助手

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online