0


【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库的安装在前章我已有介绍,不再赘述,请转至:

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 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)

本文转载自: https://blog.csdn.net/Deng333333555/article/details/126970817
版权归原作者 二十六夜. 所有, 如有侵权,请联系我们删除。

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

还没有评论