如何使用Python对Excel表格进行拼接合并
作者:二十六夜. 发布时间:2021-03-15 18:01:54
准备工作
我准备了两个表格数据,以此展示本期的表格的合并的工作。数据示例如下:
表格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)
来源:https://blog.csdn.net/Deng333333555/article/details/126970817
猜你喜欢
- 这篇文章主要介绍了Python读取csv文件实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- 目录准备读取数据写入数据修改数据进阶用法最后准备首先,我们需要安装依赖包# 安装依赖包pip3 install 
- 今天发现一个很好用二维数组排序的php方法,usort,推荐给大家,以后二维数组里面,要按照一个字段的值排序用这个方法简单高效,例如下面的数
- 该平台会集成UI自动化及api自动化,里面也会涉及到一些简单的HTML等前端,当然都是很基础的东西。在以后的博客里,我会一点点的尽量写详细,
- 这段时间服务器崩溃2次,一直没有找到原因,今天看到论坛发出的错误信息邮件,想起可能是MySQL的默认连接数引起的问题,一查果然,老天,默认
- 本文实例为大家分享了Python KNN分类算法的具体代码,供大家参考,具体内容如下KNN分类算法应该算得上是机器学习中最简单的分类算法了,
- 最近在研究Hacker News API时遇到一个HTTPS问题。因为所有的Hacker News API都是通过加密的HTTPS协议访问的
- [Hack] 意为”劈”、”砍”。 [Hacker] 意为”黑客”CSS Hack 是指针对不同的浏览器写不同的CSS code的过程,简单
- 本文实例为大家分享了python实现单机五子棋对战的具体代码,供大家参考,具体内容如下 引入pygame模块 # 1、引
- 大家知道直接使用ASP是不能够重启服务器的,这时我们需要制作一个组件来实现功能,ASP通过这个组件调用系统API,然后按照不同的重启和关机方
- 今天在修改 淘宝 宝贝详情页面的时候,发现页面在 Firefox 下遇到这样一个问题:链接用图片做背景,text-indent:-9999p
- 在学习asp过程中相信很多初学者对Sub与Function的用法有些疑惑,好像它们没什么区别都可以使用。呵呵,看了本文的介绍您就可以了解了S
- 本文实例为大家分享了python实现录音功能的具体代码,供大家参考,具体内容如下# -*- coding: utf-8 -*-import
- Monster是Alipay UED推出的网站代码分析、质量检测及评分的浏览器扩展,它能智能分析CSS、JS、HTML内容并生动形象展示网页
- 请问如何从ASP连接到Oracle Server?可用下面的代码进行连接: <%@ Lan
- 1.什么是接口接口就是一种规范与标准,在生活中经常见接口,例如:笔记本电脑的USB接口,可以将任何厂商生产的鼠标与键盘,与电脑进行链接。为什
- 当服务器必须提供与两个或更多个网络或网络子网的连接时,典型的方案是使用多宿主计算机。此计算机通常位于外围网络(也称为 DMZ、外围安全区域或
- 简述和GNU一样,YAML是一个递归着说“不”的名字。不同的是,GNU对UNIX说不,YAML说不的对象是XML。YAML不是XML。为什么
- 摘要:Oracle和微软都是数据库方面的大厂商,采用两家的产品的企业也不少。今天这篇文章为大家对比Oracle和SQLServer的镜像。标
- 程序如下:<%Function GetEmploymentStatusListDim dd = Ap