Pandas操作两个Excel实现数据对应行的合并
tags: Python Pandas Excel
写在前面
最近有朋友问我怎么把一个Excel工作表中的数据按照对应的匹配规则放到另外一个表中, 要求是两个对应的列要相同, 具体来看就是sheet1
中数据比较多, sheet2
中只含有两列, 这两列包含了年份和行业信息, 这两个表的header
(pandas中的术语, 表示表头或者列名)都是相同的, 所以关键点就是让表1中的数据与表2中的数据建立对应即可, 然后注意一下选取过的数据就不能选了这个条件.
当然可能会有直接使用Pandas内置高级函数的方法来做, 但是毕竟不是主要研究数据分析了, 能用就行…
为了数据安全, 这里就不放截图了.
主要思路
因为要填充表2, 那么当然要遍历表二的每一行, 针对这每一行给出的列标信息, 然后遍历表1中满足条件的行, 填入表二之后break
即可, 因为可能会出现重复遍历, 这里用到了哈希表的方法, 并且哈希表也有两种实现,
- 一种是给表1新添加一个列, 这个列可以是布尔值或者全
0
列, 表示没有遍历过(unused
), 然后在满足条件的行添加到表二之后, 将对应值设置为1
即可, 这样可以在之后的遍历过程中忽略掉已添加的数据. - 另一种方法就是使用哈希表存储表一中遍历过的行的索引, 思路跟上面是一样的, 但是不会对原始数据进行增删.
代码
代码部分我给出了两个版本, 一种是我首先想到的, 不借助pandas内置函数, 将数据转换为列表来完成, 这样虽然好想当然之后还要手动处理表头, 比较麻烦, 代码如下:
import pandas as pddf1 = pd.read_excel('data.xlsx', sheet_name='Sheet1', header=0).values.tolist()
df2 = pd.read_excel('data.xlsx', sheet_name='Sheet2', header=0).values.tolist()
for i in range(len(df1)):df1[i].append(0)for i, item in enumerate(df2):for j in range(len(df1)):if df1[j][-1] == 0 and df1[j][0] == item[0] and df1[j][2] == item[2]:df2[i] = df1[j]df1[j][-1] = 1break
df2 = pd.DataFrame(df2)
print(df2)with pd.ExcelWriter("data.xlsx", mode='a', engine='openpyxl') as writer:df2.to_excel(writer, sheet_name="Sheet3")
另一种用到了pandas内置的行遍历方法和索引等方法, 对Dataframe
这种pandas内置的原生数据结构支持比较好, 但是不用的话就总忘…
import pandas as pd
# pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)df1 = pd.read_excel('data.xlsx', sheet_name='Sheet1', header=0)
df2 = pd.read_excel('data.xlsx', sheet_name='Sheet2', header=0)
# 标记是否匹配过
used = set()for idx2, row2 in df2.iterrows():tmp = df1[(df1['所属行业'] == row2['所属行业']) & (df1['新年份'] == row2['新年份'])]for idx1, row1 in tmp.iterrows():if idx1 not in used:df2.iloc[idx2, :] = row1used.add(idx1)breakdf2.set_index('所属行业', inplace=True)
print(df2)with pd.ExcelWriter("data.xlsx", mode='a', engine='openpyxl') as writer:df2.to_excel(writer, sheet_name="Sheet4")
Pandas操作两个Excel实现数据对应行的合并相关推荐
- pandas操作两列日期类型数据相减并要求结果为整数类型
在 pandas 中,两列日期类型数据相减可以使用减法运算符,结果会得到一个 Timedelta 类型.如果要求结果为整数类型,可以使用其 dt 属性中的 total_seconds 方法,来获取时间 ...
- python快速对比两个excel的数据是否一致
python快速对比两个excel的数据是否一致 功能概述 导入包 封装函数 程序开始 功能概述 两个sheet里面的表头有部分不一致,但是数据对应的内容是一致的,因此需要匹配表格多的值是否一致. 输 ...
- pandas使用date_range函数生成日期序列数据、pandas将两个日期序列数据作差生成新的日期差数据列(8 days)、并提取天数数值(8)
pandas使用date_range函数生成日期序列数据.pandas将两个日期序列数据作差生成新的日期差数据列(8 days).并提取天数数值(8) 目录
- pandas比较两个dataframe特定数据列的数值是否相同并给出差值:使用np.where函数
pandas比较两个dataframe特定数据列的数值是否相同并给出差值:使用np.where函数 目录 pandas比较两个da
- excel比较两个表中数据 提取相同列 合并到同一张表中
比较两个表中数据 提取相同列 合并到同一张表中 =VLOOKUP(A2,Sheet3!A:B,1,0) A2:表示 被查找的值 Sheet3!:表示哪张表 A:B:表示查找区域 1:表示提取哪列的值 ...
- Python操作两个Excel表,筛选出新增和已删除的条目
今天实习收到了一个任务,手头有两个excel表,分别是4月份和五月份的两份资料,需要找出五月份excel和四月份相比较被删除和新增的条目.(他们事业单位平时都是人工处理这些任务,几百个条目这得校对到什 ...
- python处理wps表格数据匹配_两个excel表格数据匹配wps-WPS怎样用VLOOKUP引用另一个表格的数据...
wps精确匹配,把一个wps表格里面的数据匹配到另一... 材料/工具:wps2016 1.打开匹配个表格,表1和表2. 2.在需要放匹配值的格中输入=vl,就会自动提示vlookup函 3.双击选择 ...
- python利用pandas对两张excel表合并(一)
工作中,我们会经常遇到需要对表中记录进行合并的情况,如下图所示: 需要得到如下结果: 下面我将通过几行python代码实现上述功能: import pandas as pd # 读取1表(参数分别为1 ...
- pandas库读取多个excel文件数据并进行筛选合并处理后导入到新表格中
一.说明: 通过pandas库解决生活中的实际问题,关键词:pandas:Series/DataFrame 实际场景: ①前几日家中的服装店部分库存需要补货,店长向厂家下了部分订单: ②几日后到了一批 ...
最新文章
- HTTP/TCP/IP协议
- CSS教程:div垂直居中的N种方法
- typedef的用途
- mysql的驱动connect放在哪里_Python连接数据库两种方法,QSqlDatabase,pymmsql,驱动名...
- 深度剖析:Redis 分布式锁到底安全吗?看完这篇文章彻底懂了!
- 【分享】linux下u盘使用
- word 职称计算机考试大纲,全国职称计算机考试Word2003大纲.doc
- 内置模块/核心模块 (自带的)---http 服务器模块
- idea 删除 output directory文件_郑州Java培训新手必知的IDEA高频快捷键
- SymPy库常用函数
- 一次选中多个物体_经验之谈|Anchor Boxes:物体检测的关键
- 【Kernel学习】基础篇——01一些标准宏定义和文件include关系
- 解决jQuery多个版本,与其他js库冲突方法
- 哲学思考之矛盾分析法
- leetcode oj java Bulls and Cows
- 【前端面试宝典】超基础的vue知识
- 互联网金融学习总结(2)——互联网金融风控的应用场景及风控手段
- python常用功能_Python常用功能函数系列总结(七)
- 数据挖掘课程笔记--分类(4)朴素贝叶斯
- DataTables warning: table id=tableEquipment - Cannot reinitialise DataTable配上代码解决