使用pandas的merge()和join()函数进行数据处理

目录

一、引言

二、pandas的merge()函数

基本用法

实战案例

三、pandas的join()函数

基本用法

实战案例

四、merge()与join()的比较与选择

使用场景:

灵活性:

选择建议:

五、进阶案例与代码

六、总结


一、引言

在数据分析和处理中,数据整合是一个至关重要的步骤。Python的pandas库提供了强大的数据处理功能,其中merge()和join()函数是数据整合中常用的方法。本文将详细讲解pandas的merge()和join()函数的用法,并通过实战案例和代码,帮助新手朋友理解和掌握这两个函数。

二、pandas的merge()函数

merge()函数是pandas库中用于数据合并的主要函数,它基于一个或多个键将两个DataFrame对象合并在一起。merge()函数支持多种合并类型,如内连接(inner)、左连接(left)、右连接(right)和外连接(outer)。

基本用法

merge()函数的基本语法如下:

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

其中,left和right参数分别表示要合并的两个DataFrame对象;how参数指定合并类型;on参数指定用于合并的列名;left_on和right_on参数分别指定左侧和右侧DataFrame中用于合并的列名;left_index和right_index参数表示是否将左侧的索引和右侧的索引作为合并的键;suffixes参数用于在合并过程中解决列名冲突;copy参数表示是否返回合并后的新对象;indicator参数用于在合并后的DataFrame中添加一个指示列,标识每行数据的来源;validate参数用于验证合并操作的有效性。

实战案例

假设我们有两个DataFrame对象,分别表示两个班级的学生信息:

import pandas as pd  # 创建第一个DataFrame对象,表示班级A的学生信息  
df1 = pd.DataFrame({  'student_id': [1, 2, 3, 4],  'name': ['Alice', 'Bob', 'Charlie', 'David'],  'class': 'A'  
})  # 创建第二个DataFrame对象,表示班级B的学生信息,并包含学生的分数  
df2 = pd.DataFrame({  'student_id': [2, 3, 5, 6],  'score': [90, 85, 92, 88],  'class': 'B'  
})  # 使用merge()函数进行内连接,基于student_id列合并两个DataFrame  
merged_inner = pd.merge(df1, df2, how='inner', on='student_id')  
print(merged_inner)

执行上述代码后,将输出两个班级共有的学生信息及其分数。

三、pandas的join()函数

join()函数是pandas库中用于数据连接的另一个函数,它基于索引进行连接。与merge()函数不同,join()函数主要用于在Series或DataFrame之间基于索引进行连接操作。

基本用法

join()函数的基本语法如下:

DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)

其中,other参数表示要连接的另一个Series或DataFrame对象;on参数指定用于连接的列名或索引;how参数指定连接类型(默认为左连接);lsuffix和rsuffix参数用于在连接过程中解决列名冲突;sort参数表示是否对连接后的数据进行排序。

实战案例

假设我们有两个DataFrame对象,其中df1包含学生信息,其索引为学生ID;df2包含学生的分数信息,其索引也为学生ID:

# 使用set_index()方法将student_id列设置为索引  
df1.set_index('student_id', inplace=True)  
df2.set_index('student_id', inplace=True)  # 使用join()函数进行左连接,基于索引连接两个DataFrame  
joined_left = df1.join(df2, how='left')  
print(joined_left)

执行上述代码后,将输出df1中的所有学生信息以及与之匹配的df2中的分数信息。对于df1中存在但在df2中不存在的学生,其分数列将填充为NaN。

四、merge()与join()的比较与选择

merge()和join()函数在pandas中都是用于数据整合的重要工具,但它们在使用场景和特性上存在一些差异。以下是对这两个函数的比较和选择建议:

使用场景:

merge()函数基于列进行合并,适用于两个DataFrame之间基于共同列(键)的数据整合。它支持多种合并类型,包括内连接、左连接、右连接和外连接,并允许指定多个键进行合并。
join()函数基于索引进行连接,适用于DataFrame或Series之间基于索引的数据整合。它主要进行左连接操作,即将一个对象中的行与另一个对象中索引匹配的行连接起来。

灵活性:

merge()函数在合并时提供了更多的选项和灵活性,如可以指定多个键进行合并、处理列名冲突等。它还支持合并后数据的排序和验证。
join()函数相对简单,主要用于基于索引的左连接操作。它不支持多键合并或复杂的合并类型,但在处理基于索引的数据整合时更加直观和高效。

选择建议:

当需要基于共同列(键)进行数据整合时,应首选merge()函数。它提供了更多的选项和灵活性,可以满足各种合并需求。
当数据已经基于索引进行组织,并且需要基于索引进行数据整合时,可以选择join()函数。它在处理基于索引的数据时更加直观和高效。

五、进阶案例与代码

为了更好地说明merge()和join()函数的使用,我们将通过一个进阶案例来展示它们的实际应用。

案例:假设我们有两个DataFrame,df_orders表示订单信息,包含订单ID、客户ID、订单日期和订单金额;df_customers表示客户信息,包含客户ID、客户姓名和客户地址。我们需要将这两个DataFrame合并,以便获取每个订单的客户姓名和地址。

首先,我们创建两个示例DataFrame:

import pandas as pd  # 创建订单信息DataFrame  
df_orders = pd.DataFrame({  'order_id': [1, 2, 3, 4],  'customer_id': [101, 102, 101, 103],  'order_date': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'],  'order_amount': [100, 200, 150, 300]  
})  # 创建客户信息DataFrame,并设置客户ID为索引  
df_customers = pd.DataFrame({  'customer_id': [101, 102, 103],  'customer_name': ['Alice', 'Bob', 'Charlie'],  'customer_address': ['Address A', 'Address B', 'Address C']  
}).set_index('customer_id')  # 使用merge()函数进行左连接,基于customer_id列合并两个DataFrame  
merged_df = df_orders.merge(df_customers, left_on='customer_id', right_index=True)  
print(merged_df)

在上面的代码中,我们首先创建了两个示例DataFrame,df_orders包含订单信息,df_customers包含客户信息,并将客户ID设置为索引。然后,我们使用merge()函数进行左连接,将df_orders中的订单信息与df_customers中的客户信息合并起来。在merge()函数中,我们指定了left_on='customer_id'表示左侧DataFrame的合并键为customer_id列,right_index=True表示右侧DataFrame的合并键为索引。

执行代码后,将输出合并后的DataFrame,其中包含订单信息、客户姓名和客户地址。注意,由于我们使用了左连接,所以即使某些订单在df_customers中没有对应的客户信息(如客户ID为104的订单),这些订单仍然会出现在合并后的DataFrame中,但客户姓名和客户地址列将填充为NaN。

六、总结

本文详细介绍了pandas库中merge()和join()函数的使用方法和实战案例。merge()函数基于列进行合并,支持多种合并类型和选项,适用于基于共同列(键)的数据整合;而join()函数基于索引进行连接,主要用于基于索引的数据整合。通过比较和选择建议,我们可以根据实际需求选择合适的函数进行数据整合操作。同时,我们还通过进阶案例展示了这两个函数在实际应用中的强大功能。希望本文能够帮助新手朋友更好地理解和掌握pandas的merge()和join()函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3015217.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

stripe支付

使用第一个示例 1、示例中的PRICE_ID需要去Stripe控制台->产品目录创建产品 1、 添加产品 2、点击查看创建的产品详情 4、这个API ID就是demo中的PRICE_ID 注意:需要注意的是,测试模式和生产模式中的 $stripeSecretKey 需要对应上。简而言之就是不能生…

AI实景自动无人直播软件:引领直播行业智能化革命;提升直播效果,无人直播软件助力智能讲解

随着科技的快速发展,AI实景自动无人直播软件正在引领直播行业迈向智能化革命。它通过智能讲解、一键开播和智能回复等功能,为商家提供了更高效、便捷的直播体验。此外,软件还支持手机拍摄真实场景或搭建虚拟场景,使直播画面更好看…

如何将数据导入python

Python导入数据的三种方式: 1、通过标准的Python库导入CSV文件 Python提供了一个标准的类库CSV文件。这个类库中的reader()函数用来导入CSV文件。当CSV文件被读入后,可以利用这些数据生成一个NumPy数组,用来训练算法模型。 from csv import…

如何使用dockerfile文件将项目打包成镜像

要根据Dockerfile文件来打包一个Docker镜像,你需要遵循以下步骤。这里假设你已经安装了Docker环境。 1. 准备Dockerfile 确保你的Dockerfile文件已经准备就绪,并且位于你希望构建上下文的目录中。Dockerfile是一个文本文件,包含了用户可以调…

软件系统工程建设全套资料(交付清单)

软件全套精华资料包清单部分文件列表: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明书,概要设计说明书&#xff0c…

RTSP/Onvif安防监控系统EasyNVR级联视频上云系统EasyNVS报错“Login error”的原因排查与解决

EasyNVR安防视频云平台是旭帆科技TSINGSEE青犀旗下支持RTSP/Onvif协议接入的安防监控流媒体视频云平台。平台具备视频实时监控直播、云端录像、云存储、录像检索与回看、告警等视频能力,能对接入的视频流进行处理与多端分发,包括RTSP、RTMP、HTTP-FLV、W…

多行字符串水平相加

题目来源与2023河南省ccpc ls [ ........ ........ .0000000 .0.....0 .0.....0 .0.....0 .0.....0 .0.....0 .0000000 ........ , ........ ........ .......1 .......1 .......1 .......1 .......1 .......1 .......1 ........, ......... ......... .2222222. .......2. .…

扩展学习|一文读懂知识图谱

一、知识图谱的技术实现流程及相关应用 文献来源:曹倩,赵一鸣.知识图谱的技术实现流程及相关应用[J].情报理论与实践,2015, 38(12):127-132. (一)知识图谱的特征及功能 知识图谱是为了适应新的网络信息环境而产生的一种语义知识组织和服务的方…

什么是SSL?SSL安全证书一定要有吗?

什么是SSL证书? SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发&…

基于POSIX标准库的读者-写者问题的简单实现

文章目录 实验要求分析保证读写、写写互斥保证多个读者同时进行读操作 读者优先实例代码分析 写者优先示例代码分析 实验要求 创建一个控制台进程,此进程包含n个线程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件的要求进行读写操作。用信号量机制…

AI模型:windows本地运行下载安装ollama运行Google CodeGemma【自留记录】

AI模型:windows本地运行下载安装ollama运行Google CodeGemma【自留记录】 1、下载: 官网下载:https://ollama.com/download,很慢,原因不解释。 阿里云盘下载:https://www.alipan.com/s/jiwVVjc7eYb 提取码…

工业级POE交换机的POE供电功能有哪些好处

工业级POE交换机的POE供电功能是一种高效、方便、安全的供电方式。POE技术能够通过Ethernet网线传输电力和数据,无需额外的电源线路,从而简化了设备的安装和布线工作。在工业环境中,特别是一些远距离、高墙壁或者天花板安装位置不便的地方&am…

聚苯胺纳米纤维膜的制备过程

聚苯胺纳米纤维膜是一种由聚苯胺(PANI)纳米纤维构成的薄膜材料。聚苯胺是一种具有优良导电性、氧化还原性和化学稳定性的高分子材料,因此聚苯胺纳米纤维膜也具备这些特性,并展现出广阔的应用前景。 在制备聚苯胺纳米纤维膜时&…

RLC防孤岛负载测试的案例和实际应用经验有哪些?

RLC防孤岛负载测试是用于检测并防止电力系统出现孤岛现象的测试方法,孤岛现象是指当电网因故障或停电而与主电网断开连接时,一部分电网仍然与主电网保持连接,形成一个孤立的电网。这种情况下,如果电力系统不能及时检测到孤岛并采取…

Pascal Content数据集

如果您想使用Pascal Context数据集,请安装Detail,然后运行以下命令将注释转换为正确的格式。 1.安装Detail 进入项目终端 #即 这是在我自己的项目下直接进行克隆操作: git clone https://github.com/zhanghang1989/detail-api.git $PASCAL…

一、vue3专栏项目 -- 1、项目介绍以及准备工作

这是vue3TS的项目,是一个类似知乎的网站,可以展示专栏和文章的详情,可以登录、注册用户,可以创建、删除、修改文章,可以上传图片等等。 这个项目全部采用Composition API 编写,并且使用了TypeScript&#…

4G工业路由器快递柜应用案例(覆盖所有场景)

快递柜展示图 随着电商的蓬勃发展,快递行业迎来高速增长。为提高快递效率、保障快件安全,智能快递柜应运而生。但由于快递柜部署环境复杂多样,网络接入成为一大难题。传统有线宽带难以覆盖所有场景,而公用WiFi不稳定且存在安全隐患。 星创易联科技有限公司针对这一痛点,推出了…

视频断点上传

什么是断点续传 通常视频文件都比较大,所以对于媒资系统上传文件的需求要满足大文件的上传要求。http协议本身对上传文件大小没有限制,但是客户的网络环境质量、电脑硬件环境等参差不齐,如果一个大文件快上传完了网断了没有上传完成&#xf…

Docker安装部署一本通:从Linux到Windows,全面覆盖!(网络资源精选)

文章目录 📖 介绍 📖🏡 说明 🏡⚓️ 相关链接 ⚓️📖 介绍 📖 随着容器技术的飞速发展,Docker已成为现代软件开发和运维不可或缺的工具。然而,不同平台下的Docker安装部署方式各异,这常常让初学者感到困惑。本文将为您详细梳理各平台下Docker的安装部署方法,帮…

spring boot 集成kafka ,并且实现 发送信息,进行消费信息(亲测有效)

目录 1 目标2 实现 1 目标 有一个spring boot 项目,现在要集成kafka ,并且要实现 生产者,消费者信息; 前提是我们要有一个kafka 软件,也就是kafka 是一个软件,我们得安装成功,并且可以访问 k…