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

Python数据框的合并(一) -- merge函数

目录

 

1 merge 函数详解

1.1 左连接(Left Join):

1.2 右连接(Right Join):

1.3 全连接(Full Join 或 Outer Join):

2 代码示例

2.1 加载模块并创建示例数据框

2.2 左连接

2.3 右连接

2.4 全连接


 

1 merge 函数详解

        merge 函数通常与pandas库关联,用于合并两个或多个DataFrame,主要有三种合并方式:左连接、右连接和全连接,三种连接方式如下:

1.1 左连接(Left Join):

        a.保留左DataFrame的所有行。
        b. 如果右DataFrame中有匹配的行,则合并这些行的值。
        c.如果右DataFrame中没有匹配的行,则结果中的相应列将包含缺失值(NaN)。
        d.在pandas中,可以使用 merge(left, right, on='key', how='left') 来实现左连接,其中 'key' 是两个DataFrame中用于匹配的列名。

1.2 右连接(Right Join):

        a. 与左连接相反,右连接保留右DataFrame的所有行。
        b. 如果左DataFrame中有匹配的行,则合并这些行的值。
        c.如果左DataFrame中没有匹配的行,则结果中的相应列将包含缺失值(NaN)。
        d.在pandas中,虽然 how='right' 是理论上存在的选项,但更常见的做法是先进行左连接,然后交换两个DataFrame的顺序再进行左连接,以达到右连接的效果。

1.3 全连接(Full Join 或 Outer Join):

        a.全连接返回左DataFrame和右DataFrame中的所有行。
        b.如果两个DataFrame中有匹配的行,则合并这些行的值。
        c.如果没有匹配的行,则结果中的相应列将包含缺失值(NaN)。
        d.在pandas中,可以使用 merge(left, right, on='key', how='outer') 来实现全连接。

2 代码示例

2.1 加载模块并创建示例数据框

        首先,我们需要创建两个简单的DataFrame作为示例数据:

import pandas as pd  # 创建左DataFrame  
left = pd.DataFrame({  'key': ['A', 'B', 'C', 'D'],  'value': ['left_A', 'left_B', 'left_C', 'left_D']  
})  # 创建右DataFrame  
right = pd.DataFrame({  'key': ['B', 'C', 'D', 'E'],  'value': ['right_B', 'right_C', 'right_D', 'right_E']  
})  # 打印原始DataFrame  
print("Left DataFrame:")  
print(left)  
print("\nRight DataFrame:")  
print(right)

2.2 左连接

# 左连接
left_join = pd.merge(left, right, on='key', how='left')
print("\nLeft Join:")
print(left_join)

2.3 右连接

        pandas的merge函数没有直接的how='right'选项,但可以通过交换左右DataFrame的位置来实现右连接:

# 右连接(通过交换左右DataFrame的位置)
right_join = pd.merge(right, left, on='key', how='left')
# 注意:这里我们交换了left和right的位置,并使用了'left'作为how参数
print("\nRight Join (by swapping DataFrames and using 'left' how):")
print(right_join)

2.4 全连接

# 全连接(外连接)
full_join = pd.merge(left, right, on='key', how='outer')
print("\nFull Join (Outer Join):")
print(full_join)

 

 

http://www.lryc.cn/news/369070.html

相关文章:

  • 【Qt秘籍】[010]-Qt常用控件
  • TypeScript基础教程学习
  • JavaSE面试
  • 安全漏洞扫描工具
  • 前端开发部署:Visual Studio Code + vue
  • 基于Sentry+OpenTelemetry实现微服务前后端全链路监控
  • jquery.datetimepicker无法添加清除按钮的问题
  • Qt中解决编译中文乱码和编译失败的问题
  • Android状态栏适配问题
  • 如何为色盲适配图形用户界面
  • 【爬虫实战项目一】Python爬取豆瓣电影榜单数据
  • AI-知识库搭建(一)腾讯云向量数据库使用
  • AI数据分析:根据Excel表格数据绘制柱形图
  • 基于协调过滤算法商品推荐系统的设计
  • CS1061 “HtmlHelper”未包含“Partial”的定义,并且找不到可接受第一个“HtmlHelper”类型参数的可访问扩展方法“Partial”
  • 大数据运维学习笔记之flink standalone flink on yarn集群搭建 —— 筑梦之路
  • 在知识的海洋中航行:问题的演变与智慧的追求
  • splice()、slice()、split()三种方法的区别
  • iOS 之homebrew ruby cocoapods 安装
  • 【栈】2751. 机器人碰撞
  • 贪心算法06(leetcode738,968)
  • cve_2022_0543-redis沙盒漏洞复现 vulfocus
  • 浅解Reids持久化
  • Java24:会话管理 过滤器 监听器
  • web前端电影简介标签:深度解析与创意应用
  • Java面向对象-方法的重写、super
  • 解锁ChatGPT:从GPT-2实践入手解密ChatGPT
  • 20240605解决飞凌的OK3588-C的核心板刷机原厂buildroot不能连接ADB的问题
  • c++手写的bitset
  • 【机器学习系列】深入理解集成学习:从Bagging到Boosting