如何使用Python对Excel表格进行拼接合并

 更新时间:2023年03月22日 15:55:07   作者:二十六夜.  
这篇文章主要介绍了Python处理EXCEL基础操作篇3用Python对Excel表格进行拼接合并,文中提供了解决思路和部分实现代码,需要的朋友可以参考下

准备工作

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

表格1

表格2

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

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

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

使用Python处理EXCEL基础操作篇1在Python中导入EXCEL数据

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

使用Python处理EXCEL基础操作篇2Python对EXCEL数据的预处理

一、横向拼接

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 pd
 
df1=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)

到此这篇关于Python处理EXCEL基础操作篇3用Python对Excel表格进行拼接合并的文章就介绍到这了,更多相关Python处理EXCEL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 提升Python编码能力的3个重要概念

    提升Python编码能力的3个重要概念

    这篇文章主要给大家分享的是提升Python编码能力的3个重要概念,围绕提升Python编码的相关自资料上下文管理器、类型提示、浅拷贝和深拷贝等内容展开文章,需要的小伙伴可以参考一下
    2022-02-02
  • python自动生成sql语句的脚本

    python自动生成sql语句的脚本

    这篇文章主要介绍了python自动生成sql语句的脚本,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • python实现音乐播放和下载小程序功能

    python实现音乐播放和下载小程序功能

    这篇文章主要介绍了python实现音乐播放和下载小程序功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Python入门教程(五)Python变量的用法

    Python入门教程(五)Python变量的用法

    这篇文章主要介绍了Python入门教程(五)Python变量的用法,Python是一门非常强大好用的语言,也有着易上手的特性,本文为入门教程,需要的朋友可以参考下
    2023-04-04
  • Python内置函数的用法实例教程

    Python内置函数的用法实例教程

    这篇文章主要介绍了Python内置函数的用法,包括求绝对值的abs()函数及数值类型转换函数等,需要的朋友可以参考下
    2014-09-09
  • Python处理CSV与List的转换方法

    Python处理CSV与List的转换方法

    下面小编就为大家分享一篇Python处理CSV与List的转换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python中列表(list)和元组(tuple)的深入讲解

    python中列表(list)和元组(tuple)的深入讲解

    这篇文章主要给大家介绍了关于python中列表(list)和元组(tuple)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python如何解除一个装饰器

    Python如何解除一个装饰器

    这篇文章主要介绍了Python如何解除一个装饰器,帮助大家更好的理解和学习Python装饰器,感兴趣的朋友可以了解下
    2020-08-08
  • Python基础学习之条件控制语句小结

    Python基础学习之条件控制语句小结

    如果我需要设置一个死循环,然后靠条件来终止,怎么办?一个很简单的问题,但是我却没有说,这一篇本应该在分支控制语句里面的,现在只能拿出来水文再写一篇了,需要的朋友可以参考下
    2021-05-05
  • VsCode终端激活anconda环境问题解决

    VsCode终端激活anconda环境问题解决

    本文主要介绍了VsCode终端激活anconda环境问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01

最新评论