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实现数据对应行的合并相关推荐

  1. pandas操作两列日期类型数据相减并要求结果为整数类型

    在 pandas 中,两列日期类型数据相减可以使用减法运算符,结果会得到一个 Timedelta 类型.如果要求结果为整数类型,可以使用其 dt 属性中的 total_seconds 方法,来获取时间 ...

  2. python快速对比两个excel的数据是否一致

    python快速对比两个excel的数据是否一致 功能概述 导入包 封装函数 程序开始 功能概述 两个sheet里面的表头有部分不一致,但是数据对应的内容是一致的,因此需要匹配表格多的值是否一致. 输 ...

  3. pandas使用date_range函数生成日期序列数据、pandas将两个日期序列数据作差生成新的日期差数据列(8 days)、并提取天数数值(8)

    pandas使用date_range函数生成日期序列数据.pandas将两个日期序列数据作差生成新的日期差数据列(8 days).并提取天数数值(8) 目录

  4. pandas比较两个dataframe特定数据列的数值是否相同并给出差值:使用np.where函数

    pandas比较两个dataframe特定数据列的数值是否相同并给出差值:使用np.where函数 目录 pandas比较两个da

  5. excel比较两个表中数据 提取相同列 合并到同一张表中

    比较两个表中数据 提取相同列 合并到同一张表中 =VLOOKUP(A2,Sheet3!A:B,1,0) A2:表示 被查找的值 Sheet3!:表示哪张表 A:B:表示查找区域 1:表示提取哪列的值 ...

  6. Python操作两个Excel表,筛选出新增和已删除的条目

    今天实习收到了一个任务,手头有两个excel表,分别是4月份和五月份的两份资料,需要找出五月份excel和四月份相比较被删除和新增的条目.(他们事业单位平时都是人工处理这些任务,几百个条目这得校对到什 ...

  7. python处理wps表格数据匹配_两个excel表格数据匹配wps-WPS怎样用VLOOKUP引用另一个表格的数据...

    wps精确匹配,把一个wps表格里面的数据匹配到另一... 材料/工具:wps2016 1.打开匹配个表格,表1和表2. 2.在需要放匹配值的格中输入=vl,就会自动提示vlookup函 3.双击选择 ...

  8. python利用pandas对两张excel表合并(一)

    工作中,我们会经常遇到需要对表中记录进行合并的情况,如下图所示: 需要得到如下结果: 下面我将通过几行python代码实现上述功能: import pandas as pd # 读取1表(参数分别为1 ...

  9. pandas库读取多个excel文件数据并进行筛选合并处理后导入到新表格中

    一.说明: 通过pandas库解决生活中的实际问题,关键词:pandas:Series/DataFrame 实际场景: ①前几日家中的服装店部分库存需要补货,店长向厂家下了部分订单: ②几日后到了一批 ...

最新文章

  1. HTTP/TCP/IP协议
  2. CSS教程:div垂直居中的N种方法
  3. typedef的用途
  4. mysql的驱动connect放在哪里_Python连接数据库两种方法,QSqlDatabase,pymmsql,驱动名...
  5. 深度剖析:Redis 分布式锁到底安全吗?看完这篇文章彻底懂了!
  6. 【分享】linux下u盘使用
  7. word 职称计算机考试大纲,全国职称计算机考试Word2003大纲.doc
  8. 内置模块/核心模块 (自带的)---http 服务器模块
  9. idea 删除 output directory文件_郑州Java培训新手必知的IDEA高频快捷键
  10. SymPy库常用函数
  11. 一次选中多个物体_经验之谈|Anchor Boxes:物体检测的关键
  12. 【Kernel学习】基础篇——01一些标准宏定义和文件include关系
  13. 解决jQuery多个版本,与其他js库冲突方法
  14. 哲学思考之矛盾分析法
  15. leetcode oj java Bulls and Cows
  16. 【前端面试宝典】超基础的vue知识
  17. 互联网金融学习总结(2)——互联网金融风控的应用场景及风控手段
  18. python常用功能_Python常用功能函数系列总结(七)
  19. 数据挖掘课程笔记--分类(4)朴素贝叶斯
  20. DataTables warning: table id=tableEquipment - Cannot reinitialise DataTable配上代码解决

热门文章

  1. stackTrace
  2. A33_LED驱动调试
  3. 文章评论:“鞋服企业以销定产-零库存不难”
  4. eval函数的用法和危害以及避免方法
  5. 一般情况下andlink上不了线主要原因
  6. 某中大型游戏公司面试题
  7. 对软件工程需求分析及创新项目等实际问题给提出建议或意见
  8. O’Reilly精品图书系列:编写可读代码的艺术].(鲍斯维尔等).尹哲等
  9. 安装Adobe Photoshop 2014 出现的界面字体太小问题的解决
  10. SQL Server2008远程调用过程失败