![76910cca0b12c227b71cc1ea99a0a69e.png](https://i-blog.csdnimg.cn/blog_migrate/6ecb00c25f3ba56c774054c06787a046.jpeg)
首先是需求一:
有 表 A.xlsx 和 表 B.xlsx,想将其纵向合并成同一张表格:
![5bc8bd53aa91de0168e65024683fc699.png](https://i-blog.csdnimg.cn/blog_migrate/5f501b4a42a32b5f4da30bdb7ae3ba11.jpeg)
以及需求二:
想在 表 C.xlsx 中提取第三列、在 表 D.xlsx 中提取前两列,整合成新的表格:
![46e269c309a78d4c9d1e51755ed58b9a.png](https://i-blog.csdnimg.cn/blog_migrate/e8639a883b9f9cfe3af4aba86ab929f1.jpeg)
如果不用编程,纯手工操作其实并不难,选中区域、复制再粘贴就搞定了。
工作量小的情况下,手工操作一番还挺快乐的;
但如果文件几十上百份、甚至成百上千的话就一言难尽了。
所以,工作量大时,编程代码来实现上述操作的优势就凸显了:
修改代码中几个参数,设置几个循环遍历,等几秒钟便可轻松搞定。
下面看 Python 实现的思路和步骤,还是要用之前提到过的 pandas 库。
pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
关于 pandas 网上一堆这里先不赘述。
此外,由于涉及 xlsx 格式的 Excel 表格读写,还需要 xlrd 和 openpyxl 模块的支持,可通过以下命令安装模块:
pip install xlrdpip install openpyxl
如果运行代码过程中,报错 No Module ... 可以尝试安装相应模块来解决。
需求一编码
模块准备就绪,首先是导入 pandas 模块,通过 read_excel 方法来读取表格内容。
表 A 读取如下:
![79577a13ca9af44da7509f92a804f3a4.png](https://i-blog.csdnimg.cn/blog_migrate/75602fa96101f283b6c23ab5839474ac.jpeg)
表 B 读取如下:
![bc18b1e6d88061eb89b1a00ac0432376.png](https://i-blog.csdnimg.cn/blog_migrate/0538e1f60af050dacd0db46ce6222955.png)
读取到的表格内容的数据格式是 Dataframe (pandas 中的一种数据格式),最左侧竖排 0 开始的数字是该数据格式的 index。
我们可以通过 pandas 中的 concat 方法来合并不同的 Dataframe。
注意 concat 方法中有个参数是 axis,默认为 0 表示按行即纵向合并,此处我们没有做设置使用的是默认值:
![b1f14f7da98175242f2bcd95b80c3504.png](https://i-blog.csdnimg.cn/blog_migrate/df29a8c45e8046db7e8839bb6eafdef1.png)
合并成功,但仍有问题,即最左侧的 index 和 "序号" 一列中的数字并没有实现依据实际表格数据进行更新,仍是保持原样需要做调整。
首先是通过 reset_index 来重置下 index:
![b6f01e96b54cfb612741929c153dea36.png](https://i-blog.csdnimg.cn/blog_migrate/3cf4106003aab52e953b349fa33f7a76.jpeg)
此外还要对"序号"这一列中的数字更新处理:
![2ef4b60ae29963a244a38587e8cb0b07.png](https://i-blog.csdnimg.cn/blog_migrate/1ec6f4cc9f80714edd7391ed8ec901b9.jpeg)
OK,纵向合并完成,将合并后的数据通过 to_excel 方法保存到 xlsx 表格中:
![98fb5d40816e03398072824b0a4242f5.png](https://i-blog.csdnimg.cn/blog_migrate/08b39e95c4cdad08db4707e9ab39ade0.png)
最终,文件夹内会生成 result1.xlsx 表格文件,即合并后的结果了。
需求二编码
相较上个需求,此处额外多了一个提取某列,即定位数据格式中的部分数据,同时不同的是这次我们要横向按列合并提取出的内容。
大致有些思路,仍是一步步来,首先仍是通过 read_excel 读取两个表格:
![1ab94c9486ea295ba07e3000bc2fb353.png](https://i-blog.csdnimg.cn/blog_migrate/f90e68ac413e6c58968914bb4c7d189c.jpeg)
因为需求要定位到特定某列,故通过 iloc 方法实现通过索引定位并提取某行某列数据,首先是 iloc[:,2] 获取 表 C 中的第三列(此处 ":" 代表所有行;
2 代表由0开始的列索引值,即第三列):
![11284abd24575b2bbdef1523440b331a.png](https://i-blog.csdnimg.cn/blog_migrate/e95ae0f9b75fea923c994b7fa5f1eb45.png)
以及 iloc[:,[0,1]] 获取 表 D 中的第一、二列(此处 ":" 代表所有行;
[0,1] 代表由0开始的列索引值,即第一列和第二列):
![c71c0e2d05bc5c17dffd1458bac7a724.png](https://i-blog.csdnimg.cn/blog_migrate/cc36f57bcfc7e1f339efbb06ed812dbb.png)
获取到了特定的数据内容,仍然通过 concat 来合并,这里由于我们需要横向按列合并,故需要额外设置 axis 参数为 1:
![7319c52ed06803e750a0e55c04b8a9d0.png](https://i-blog.csdnimg.cn/blog_migrate/ab934e356bda84796646f5aeffe9926a.png)
最终仍是通过 to_excel 方法保存 xlsx 格式表格文件:
![5545c8d78c4cd095154d4302e13b56b8.png](https://i-blog.csdnimg.cn/blog_migrate/781ce42ac2096a4c5865492c1ebf59e7.png)
至此,需求完成,任务搞定。
-END-
全新打卡学习模式每天30分钟30天学会Python编程
![110a59c4963edf71f1845622fc73c4ef.png](https://i-blog.csdnimg.cn/blog_migrate/b640d3dd5167a31fe929595fa460391e.jpeg)
世界正在奖励坚持学习的人!