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

一周学会Pandas2 Python数据处理与分析-Pandas2数据合并与对比-pd.merge():数据库风格合并

锋哥原创的Pandas2 Python数据处理与分析 视频教程:  

2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili

pd.merge():数据库风格合并

**核心功能**:基于列值(类似 SQL JOIN)合并数据,支持多种连接方式。 适用场景:关联不同数据表的公共字段(如用户 ID、订单号)。

语法:

pd.merge(left,                 # 左侧 DataFrameright,                # 右侧 DataFramehow='inner',          # 合并方式:'inner', 'outer', 'left', 'right'on=None,              # 用于合并的列名(需在两个 DataFrame 中存在)left_on=None,         # 左侧 DataFrame 中作为键的列right_on=None,        # 右侧 DataFrame 中作为键的列left_index=False,     # 是否用左侧索引作为合并键right_index=False,    # 是否用右侧索引作为合并键suffixes=('_x', '_y') # 列名冲突时的后缀
)

参数详解

  • left/right: 左表和右表(必填)。

  • on: 连接的列名(若未指定,自动查找同名列)。

  • how: 连接方式,可选 inner(默认)、leftrightouter

  • suffixes: 列名冲突时的后缀(默认 ('_x', '_y'))。

  • validate: 验证合并关系,如 'one_to_one''one_to_many'

常用场景示例

1,基本合并(基于共同列)
import pandas as pddf1 = pd.DataFrame({'id': [1, 2, 3],'name': ['Alice', 'Bob', 'Charlie']
})df2 = pd.DataFrame({'id': [2, 3, 4],'age': [25, 30, 28]
})# 按 'id' 列合并(默认 inner join)
result = pd.merge(df1, df2, on='id')

2,指定合并方式(how 参数)

左连接(保留左侧所有行)

result = pd.merge(df1, df2, on='id', how='left')

输出(左侧 id=1 的 age 为 NaN):

外连接(保留所有行)

result = pd.merge(df1, df2, on='id', how='outer')

输出(id=1 和 id=4 的缺失值填充 NaN):

3,合并键列名不同(left_on 和 right_on)
df3 = pd.DataFrame({'user_id': [2, 3, 4],'score': [90, 85, 88]
})# 合并 df1 的 'id' 和 df3 的 'user_id'
result = pd.merge(df1, df3, left_on='id', right_on='user_id')

4,处理列名冲突(suffixes 参数)

当两个 DataFrame 有相同列名(非合并键)时,自动添加后缀:

df4 = pd.DataFrame({'id': [2, 3],'name': ['Bob', 'Charlie'],'department': ['HR', 'Tech']
})result = pd.merge(df1, df4, on='id', suffixes=('_old', '_new'))

输出(name 列被区分为 name_oldname_new):

5,多键合并

指定多个列作为合并键:

df5 = pd.DataFrame({'id': [1, 2, 2],'year': [2022, 2023, 2023],'sales': [100, 200, 150]
})df6 = pd.DataFrame({'id': [1, 2, 2],'year': [2022, 2023, 2023],'profit': [20, 40, 30]
})result = pd.merge(df5, df6, on=['id', 'year'])

输出(按 idyear 共同匹配):

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

相关文章:

  • 基于蒙特卡罗 AWGN信道调制信号互信息(信道容量)
  • vc++在Windows中查找扬声器输出的当前音量级别
  • DeepSeek+白果AI论文:开启答辩PPT生成的「智能双引擎」时代
  • 国际前沿知识系列二:基于不同类型头部碰撞中的运动学特征预测能力统计分析
  • 005 深度优先搜索(DFS)算法详解:图解+代码+经典例题
  • C++编译/链接模型
  • Fuzz 模糊测试篇JS 算法口令隐藏参数盲 Payload未知文件目录
  • 基于 ColBERT 框架的后交互 (late interaction) 模型速递:Reason-ModernColBERT
  • 广东省省考备考(第十九天5.24)—言语(第七节课)
  • Qwen2.5 VL 多模态融合阶段(3)
  • python炸鱼船
  • java基础(继承)
  • 【免费使用】剪Y专业版 8.1/CapCut 视频编辑处理,素材和滤镜
  • Spyglass:跨时钟域同步(长延迟信号)
  • 异步处理与事件驱动中的模型调用链设计
  • 5.24 打卡
  • 【电池】极端环境对锂离子电池的影响-【2.5万字解析】
  • 数值分析(电子和通信类)
  • 什么是电离层闪烁
  • WPS 64位与EndNote21.5工作流
  • 【大模型】TableLLM论文总结
  • 力扣刷题(第三十六天)
  • C++ class和struct的区别
  • AI专题:如何把DeepSeek变成你的AI个人助手
  • 虚拟环境中的PyQt5 Pycharm设置参考
  • 多态的总结
  • http协议和session会话
  • 变革性的聚变路线:基于FRC构型的可控核聚变
  • leetcode 862. 和至少为 K 的最短子数组
  • 2025深圳国际无人机展深度解析:看点、厂商与创新亮点