专栏首页数据森麟Python 合并 Excel 表格

Python 合并 Excel 表格

作者:TED

来源:TEDxPY

之前曾尝试用 Python 写过整理 Excel 表格的代码,记录在《Python 自动整理 Excel 表格》中。当时也是自己初试 pandas,代码中用到的也是结合需求搜索来的 merge 方法实现两个表格的“融合”,现在看来也不算复杂。起初没什么人看,也没留意;最近很意外地被几位朋友转载了去,竟也带着原文阅读破千了,吸引了不少新的关注。

由此想到,可能 pandas 处理表格并没有想象中被熟知,如果不接触可能完全意识不到会有这类工具的存在。

今天要分享的这个问题和之前的类似,也是表格合并:

首先是需求一:有 表 A.xlsx 和 表 B.xlsx,想将其纵向合并成同一张表格:

以及需求二:想在 表 C.xlsx 中提取第三列、在 表 D.xlsx 中提取前两列,整合成新的表格:


如果不用编程,纯手工操作其实并不难,选中区域、复制再粘贴就搞定了。工作量小的情况下,手工操作一番还挺快乐的;但如果文件几十上百份、甚至成百上千的话就一言难尽了。所以,工作量大时,编程代码来实现上述操作的优势就凸显了:修改代码中几个参数,设置几个循环遍历,等几秒钟便可轻松搞定。

下面看 Python 实现的思路和步骤,还是要用之前提到过的 pandas 库。

pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。 pandas 百度百科

关于 pandas 网上一堆这里先不赘述。此外,由于涉及 xlsx 格式的 Excel 表格读写,还需要 xlrd 和 openpyxl 模块的支持,可通过以下命令安装模块:

pip install xlrd
pip install openpyxl

如果运行代码过程中,报错 No Module ... 可以尝试安装相应模块来解决。

需求一编码

模块准备就绪,首先是导入 pandas 模块,通过 read_excel 方法来读取表格内容。表 A 读取如下:

表 B 读取如下:

读取到的表格内容的数据格式是 Dataframe (pandas 中的一种数据格式),最左侧竖排 0 开始的数字是该数据格式的 index。

我们可以通过 pandas 中的 concat 方法来合并不同的 Dataframe。注意 concat 方法中有个参数是 axis,默认为 0 表示按行即纵向合并,此处我们没有做设置使用的是默认值:

合并成功,但仍有问题,即最左侧的 index 和 "序号" 一列中的数字并没有实现依据实际表格数据进行更新,仍是保持原样需要做调整。首先是通过 reset_index 来重置下 index:

此外还要对"序号"这一列中的数字更新处理:

OK,纵向合并完成,将合并后的数据通过 to_excel 方法保存到 xlsx 表格中:

最终,文件夹内会生成 result1.xlsx 表格文件,即合并后的结果了。

需求二编码

相较上个需求,此处额外多了一个提取某列,即定位数据格式中的部分数据,同时不同的是这次我们要横向按列合并提取出的内容。大致有些思路,仍是一步步来,首先仍是通过 read_excel 读取两个表格:

因为需求要定位到特定某列,故通过 iloc 方法实现通过索引定位并提取某行某列数据,首先是 iloc[:,2] 获取 表 C 中的第三列(此处 ":" 代表所有行;2 代表由0开始的列索引值,即第三列):

以及 iloc[:,[0,1]] 获取 表 D 中的第一、二列(此处 ":" 代表所有行;[0,1] 代表由0开始的列索引值,即第一列和第二列):

获取到了特定的数据内容,仍然通过 concat 来合并,这里由于我们需要横向按列合并,故需要额外设置 axis 参数为 1:

最终仍是通过 to_excel 方法保存 xlsx 格式表格文件:

至此,需求完成,任务搞定。

后续编码

接下来我们可能还有疑问,这样写出来的代码不还是只能将两份表格合并为一,怎么处理大量表格呢?

还记得学 Python 或其它编程语言开头都要学的 for 循环、定义方法么?基于刚实现的代码,我们就可以将整个合并流程定义成一个独立的方法,针对我们需要处理的大量文件,可以通过 for 循环来遍历、调用定义的方法来逐一完成处理。

由于我手头上没有太多文件,且提问题的朋友没做要求,所以后续代码没有展开。


此外,对于公众号的文章,我最初的观点是写自觉有趣的东西给大家当个乐子看。随着大家的反馈与提问,现在我对 "有趣" 的理解也丰富了些:除了博人眼球,用编程思路去优化现实中的问题也是很有意思的。

应懒癌朋友的要求,在这整理一下之前发过的几篇关于 Excel 表格处理以及 PDF 文件相关的文章,如有需要自取哈~

Excel 表格处理相关:

PDF 文件处理相关:

本文分享自微信公众号 - 数据森麟(shujusenlin)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 真香还是假香,Python处理分析128张Excel表格竟然不到3秒?

    更新完Pandas基础教程,后台有不少旁友留言,想要了解怎么用Python提升处理数据的效率,或者说怎么用Python自动处理多张Excel表格,于是乎便有了本...

    数据森麟
  • 数据团队思考:数据人的通用技能要求

    最近经常遇到有朋友问下面这类问题,结合最近的一些思考,本篇聊一下,数据人该具备哪些通用的技能。

    数据森麟
  • 做了点SQL题。

    说实话,我真没刷过题,上上周群里有朋友问了一道sql题,那种难度级别已经够你面任何一家公司了。所以,没做出来也很正常,我之所以会做也只是因为用的多而已。再套路一...

    数据森麟
  • 如何用 Python 和循环神经网络预测严重交通拥堵?

    本文为你介绍,如何从 Waze 交通事件开放数据中,利用序列模型找到规律,进行分类预测。以便相关部门可以未雨绸缪,提前有效干预可能发生的严重拥堵。

    用户2930930
  • 《深度学习》学习笔记一——线性代数

    使用zeros创建一个3×23×23\times 2的0矩阵,还可以使用ones函数创建1矩阵

    夜雨飘零
  • 很久很久以前学的,16个HTML笔记

    英文名:HyperText Markup Language,意思为:超文本标记语言。

    Lemon黄
  • 熵的概念

    熵,从统计学角度,表示某个宏观状态的微观状态数,熵越大,某个宏观状态的微观状态越多,宏观状态的信息量越大,该宏观状态对应的封闭系统越混乱,在没有外界...

    魏晓蕾
  • 译文 | 为什么人力资源也要运用大数据?

    大数据已经进入人力资源领域,而且人力资源的专家们也张开双臂迎接大数据趋势的到来。 事实上,根据2013年的SAS 对1200多家企业的调查,6400个员工人数超...

    CDA数据分析师
  • PAT Advanced 1066

    An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights...

    chain
  • 记录一个python里面很神奇的操作,对一个包含列表的元组进行增量赋值

    今天记录一个很神奇的操作。关于序列的增量赋值。如果你很熟悉增量赋值,你也不妨看下去,我想说的是有关于增量赋值和元组之间一种神奇的操作。来自 **《流畅的Pyth...

    用户1682544

扫码关注云+社区

领取腾讯云代金券