当前位置: 首页 > backend >正文

Python Pandas.merge函数解析与实战教程

Python Pandas merge 函数解析与实战教程

摘要

本文章旨在提供一份关于 Pandas 库核心功能 pandas.merge 详尽的使用教程。在数据科学和分析领域,数据融合是不可或缺的一环,而 merge 函数正是实现这一目标的最强大、最灵活的工具之一。我将从 merge 的基本概念入手,系统性地剖析其每一个参数的用途和行为,并通过由浅入深的代码示例,展示其在真实场景中的应用,包括多条件连接、时间序列处理和空值管理。此外,还将探讨 mergejoinconcat 的区别,并针对处理大规模数据集(如 10GB+)的性能优化技术进行讨论,涵盖 Pandas 自身的优化技巧以及 Dask、Modin 等并行计算框架的应用与对比。


一、 merge 核心概念:关系型数据连接的基石

在深入了解 pandas.merge 函数之前,理解其背后的核心思想——关系型数据库中的连接(JOIN)操作——至关重要。merge 操作允许我们基于一个或多个共同的键(Key),将两个独立的 DataFrame(可以想象成两张数据表)中的行横向组合起来。

Pandas 的 merge 支持四种主要的连接方式,这与 SQL 的 JOIN 类型直接对应 :

  1. 内连接 (Inner Join): 这是 merge 的默认连接方式 (how='inner') 。结果集是两个 DataFrame 中连接键的交集,即只保留在两个 DataFrame 中都存在的键的行。
  2. 左连接 (Left Join): (how='left') 保留左边 DataFrame 的所有行。如果在右边 DataFrame 中没有找到匹配的键,则结果中对应的列将填充为 NaN
  3. 右连接 (Right Join): (how='right') 保留右边 DataFrame 的所有行。如果在左边 DataFrame 中没有找到匹配的键,则结果中对应的列将填充为 NaN
  4. 外连接 (Outer Join): (how='outer') 结果集是两个 DataFrame 中连接键的并集。对于只存在于其中一个 DataFrame 的键,另一个 DataFrame 的对应列将填充为 NaN

理解这四种连接方式是有效使用 merge 函数的基础。

二、 pandas.merge 函数参数深度详解

pandas.merge 函数其签名通常如下:

pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None
)

下面我们将对每个关键参数进行详细解析。

1. 连接对象 (left, right)

  • left: 第一个 DataFrame 或命名的 Series 对象。
  • right: 第二个 DataFrame 或命名的 Series 对象。

2. 连接方式 (how)

  • 功能: 指定要执行的合并类型。
  • 可选值: 字符串类型,可选 'left', 'right', 'outer', 'inner'
  • 默认值: 'inner'

3. 连接键 (on, left_on, right_on, left_index, right_index)

这是 merge 中最核心也最灵活的部分,用于指定依据哪些列或索引进行对齐。

  • on: 用于连接的列名。这个列名必须同时存在于 leftright 两个 DataFrame 中 。如果未指定,并且 leftright 有共同的列名,Pandas 将默认使用这些共同列作为连接键。可以是一个列名字符串,也可以是包含多个列名的列表,用于实现多键合并 。
  • left_onright_on: 当左右两个 DataFrame 的连接键列名不同时使用。left_on 指定左边 DataFrame 的列,right_on 指定右边 DataFrame 的列 。同样可以是单个列名或列名列表。
  • left_indexright_index: 当希望使用索引作为连接键时,将这两个参数设置为 True 。可以与 left_onright_on 结合使用,实现列与索引的混合连接 。

4. 排序 (sort)

  • 功能: 合并后是否对连接键进行字典序排序。
  • 行为: 默认为 False。在早期版本中默认为 True,但从较新版本开始为了性能默认为 False。设置为 False 可以显著提升性能,尤其是在处理大规模数据时 。只有在结果的顺序至关重要时才需要设置为 True

5. 重复列名处理 (suffixes)

  • 功能: 当 leftright 两个 DataFrame 中存在非连接键的同名列时,merge 会使用后缀来区分它们。
  • 格式: 一个包含两个字符串的元组,分别作为左、右 DataFrame 重复列名的后缀。
  • 默认值: ('_x', '_y') 。例如,如果两个 DataFrame 都有一个名为 data 的列,合并后会变成 data_xdata_y

6. 结果来源指示器 (indicator)

  • 功能: 一个非常实用的调试和分析工具。当设置为 True 时,合并后的 DataFrame 会额外增加一列名为 _merge 的分类列。
  • _merge 列的值:
    • 'both': 表示该行的连接键在左右两个 DataFrame 中都存在。
    • 'left_only': 表示该行的连接键仅存在于左 DataFrame 中(在左连接或外连接中出现)。
    • 'right_only': 表示该行的连接键仅存在于右 DataFrame 中(在右连接或外连接中出现)。
  • 用途: 可以方便地筛选出只在特定一侧存在的数据,或者验证合并的完整性 。

http://www.xdnf.cn/news/16515.html

相关文章:

  • 软件测试之功能测试
  • Ubuntu系统完整配置教程
  • unbuntn 22.04 coreutils文件系统故障
  • RabbitMQ快速入门
  • 基于FPGA和DDS原理的任意波形发生器(含仿真)
  • 【Unity】Application类常见路径一览表
  • 基于LangGraph Cli的智能数据分析助手
  • 主要分布于内侧内嗅皮层的层Ⅲ的网格-速度联合细胞(Grid × Speed Conjunctive Cells)对NLP中的深层语义分析的积极影响和启示
  • OpenCV(05)直方图均衡化,模板匹配,霍夫变换,图像亮度变换,形态学变换
  • nvim cspell
  • 基于 OpenCV 与 sklearn 的数字识别:KNN 算法实践
  • 123页PPT麦肯锡49个思维工具和方法论PPT
  • 一个典型的微控制器MCU包含哪些模块?
  • Java Collections工具类
  • 达梦有多少个模式
  • 页面性能优化
  • Java基础-IO流
  • 【灰度实验】——图像预处理(OpenCV)
  • 商用车的自动驾驶应用场景主要包括七大领域
  • 开发指南125-HTML DOM事件
  • 1.gradle安装(mac)
  • RocketMQ入门实战详解
  • clock_getres系统调用及示例
  • 智慧社区项目开发(二)——基于 JWT 的登录验证功能实现详解
  • 分布式高可用架构核心:复制、冗余与生死陷阱——从主从灾难到无主冲突的避坑指南
  • 【Linux篇】进程间通信:进程IPC
  • 负载均衡算法中的加权随机算法
  • kafka开启Kerberos使用方式
  • uniapp_微信小程序_根据胶囊按钮计算出的导航栏高度为什么不是44px?
  • 【Linux】Ubuntu上安装.NET 9运行时与ASP.NET Core项目部署入门