文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【Python处理EXCEL】基础操作篇3:用Python对Excel表格进行拼接合并

2023-09-01 19:13

关注

目录

准备工作

一、横向拼接

1.1 一般拼接

1.2 指定键进行拼接,即指定某一列作为两个表的连接依据。

1.2.1 多对一

1.2.2 多对多

1.2.3 用on来指定多个连接键

1.2.4 指定左右连接键

1.2.5 索引当作连接键

1.3 连接的方式

1.3.1 内连接(inner)

1.3.2 左连接(left)

1.3.3 右连接(right)

1.3.4 外连接(outer)

二、纵向拼接

2.1 普通合并

2.2 重叠数据的合并

三、整合代码


我准备了两个表格数据,以此展示本期的表格的合并的工作。数据示例如下:

表格1

表格2

接着将这两个表格的数据分别导入python中,导入代码入下:

import pandas as pddf1=pd.read_excel(r"D:\杂货\展示数据1.xlsx",sheet_name='Sheet1')df2=pd.read_excel(r"D:\杂货\展示数据2.xlsx",sheet_name='Sheet1')

 具体的导入方法和以上使用到的pandas库的安装在前章我已有介绍,不再赘述,请转至:

https://blog.csdn.net/Deng333333555/article/details/125092526?spm=1001.2014.3001.5501

本篇涉及到一些基础的表格数据的概念,而对于“索引”的相关知识可以看之前写的“基础操作篇2”,里面有相关的介绍,可以帮助理解“索引”的含义。相关可转至以下连接:

https://blog.csdn.net/Deng333333555/article/details/125138116?spm=1001.2014.3001.5501 

1.1 一般拼接

首先我们先看一下合并前的表格1和表格2的数据样式:

 这两个表格存在公共列,为列索引为“学号”的那一列。

合并代码如下:

merge_1=pd.merge(df1,df2)#df1与df2分别为要合并的两个表格print(merge_1)

此时程序会自己寻找两个表的公共列,依照公共列进行拼接。(公共列:有相同的列)

 合并后的数据如上图所示。

1.2 指定键进行拼接,即指定某一列作为两个表的连接依据。

1.2.1 多对一

多对一的情况下的列表数据大致为一下形式:

 可以看到,上面为列表1,下面为列表2,列表1的“学号”那一列的数据都是“唯一的”,即分别只有一个100,101,102,103,没有重复值;而在列表2中,“学号”那一列的数据就有重复值,即有两个100,101等。这种情况下,将列表2合并到列表1中就叫作多对一的合并。

合并代码如下:

merge_2=pd.merge(df1,df2,on="学号")#on="学号"即是说依照学号那一列进行合并print(merge_2)

1.2.2 多对多

多对多情况下的数据样式如下:

 由上图可知,多对多即是列表1与列表2中“学号”列都有重复项。合并代码如下:

merge_3=pd.merge(df1,df2)print(merge_3)

 合并后的表格如下:

1.2.3 用on来指定多个连接键

原数据样式如下:

 上面为表格1,下面为表格2(即df1和df2)

由1.2.1一处已经了解到,可以通过on="学号"来指定某个连接键,而当需要指定多个连接键时,同样也是使用on来实现。代码如下:

merge_4=pd.merge(df1,df2,on=['姓名','学号'])#语法为on=[]print(merge_4)

合并后的列表如下:

1.2.4 指定左右连接键

合并前的数据样式为:

 以上为两个待拼接的表格。

当要连接的两个表之间没有公共列时(实际值一样,但列名不同),则可通过左右连接键拼接两个表。其中left_on用来指明左表的连接键的列名,right_on用来指明右表的连接键的列名。具体看如下示,代码如下:

merge_5=pd.merge(df1,df2,left_on="编号",right_on='学号')print(merge_5)

执行代码,合并后的列表如下:

1.2.5 索引当作连接键

从上面的表格数据中可以看到,其索引列为最左边的那几个数字,0,1,2,3……。但有时候我们会需要用某一列的内容作为索引列,此时可以通过以下代码将索引列替换掉:

change=df1.set_index("编号")print(change)

转换索引列前的列表样式如下:

 转换之后索引列的列表样式如下:

不难发现最左边的那一列的索引有所不同。(注意:此时待合并的列表1与列表2的索引已经不同了)

接下来我们可以通过以下代码依据索引来进行列表的合并:

merge_6=pd.merge(df1,df2,left_index=True,right_index=True)print(merge_6)

合并后的列表样式如下:

1.3 连接的方式

1.3.1 内连接(inner)

内连接就是取两个表中的共同拥有的内容,而若不是共同拥有的内容的话,在内连接后形成的新的表格会将非共同拥有的内容“删除”,只保留共同拥有的内容。

合并前的两个列表样式如下:

 内连接的代码如下:

merge_7=pd.merge(df1,df2,on='学号',how='inner')print(merge_7)

 合并后的表格如下:

1.3.2 左连接(left)

以左表为基础,右表往左表上拼接。当遇到左(右)表有,而右(左)表没有的内容,空缺的部分则会以NaN的方式填充。

合并前的两个列表样式如下:

 合并代码如下:

merge_8=pd.merge(df1,df2,on='学号',how='left')print(merge_8)

 合并后表格如下:

1.3.3 右连接(right)

以右表为基础,左表往右表上拼接。其他与左连接同理。

1.3.4 外连接(outer)

取两个表的并集。

合并代码如下:

merge_9=pd.merge(df1,df2,on='学号',how='outer')print(merge_9)

 合并前表格如下:

合并后表格如下:

2.1 普通合并

合并前表格如下:

代码如下:

merge_x=pd.concat([df1,df2])print(merge_x)

合并后表格如下:

注意:纵向拼接的concat中使用的是列表,和merge的形式有所不同。

索引设置:普通合并的方法中,合并后的表格是保留原索引的,如上图所,编号处的数字索引是重复的。而为了解决这个问题,我们通常会需要对索引进行设置。

合并代码如下:

merge_x=pd.concat([df1,df2],ignore_index=True)print(merge_x)

合并后表格如下:

通过ignore_index=True设置的拼接表格后,可以发现最左边的编号索引编程了顺序数字。

2.2 重叠数据的合并

在未处理重叠数据的合并形式下,如果两个表格中出现相同的数据内容,那么在合并后的新表格中会出现多条数据重复的情况,为解决这个问题,我们可以进行如下处理:

合并前的表格:

 通过以下代码合并:

merge_y=pd.concat([df1,df2],ignore_index=True).drop_duplicates()print(merge_y)

合并后的表格如下:

此时程序会自动地将重复项合二为一。从合并前后的表格对比可知,合并前有两个“王五”的内容

,合并后两个“王五”合二为一。

import pandas as pddf1=pd.read_excel(r"D:\杂货\展示数据1.xlsx",sheet_name='Sheet1')df2=pd.read_excel(r"D:\杂货\展示数据2.xlsx",sheet_name='Sheet1')print(df1)print(df2)merge_1=pd.merge(df1,df2)#一般横向拼接print(merge_1)merge_2=pd.merge(df1,df2,on="学号")#指定连接键print(merge_2)merge_3=pd.merge(df1,df2)print(merge_3)merge_4=pd.merge(df1,df2,on=['姓名','学号'])#指定多个连接键print(merge_4)merge_5=pd.merge(df1,df2,left_on="编号",right_on='学号')#指定左右连接键print(merge_5)change=df1.set_index("编号")#重置索引print(change)merge_6=pd.merge(df1,df2,left_index=True,right_index=True)#依照索引拼接print(merge_6)merge_7=pd.merge(df1,df2,on='学号',how='inner')#内连接print(merge_7)merge_8=pd.merge(df1,df2,on='学号',how='left')#左连接print(merge_8)merge_9=pd.merge(df1,df2,on='学号',how='outer')#外连接print(merge_9)merge_x=pd.concat([df1,df2],ignore_index=True)#一般纵向拼接print(merge_x)merge_y=pd.concat([df1,df2],ignore_index=True).drop_duplicates()#纵向拼接并重置索引print(merge_y)

来源地址:https://blog.csdn.net/Deng333333555/article/details/126970817

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯