工作中,很多小伙伴都会遇到一些需求,将一份Excel文档按照部门进行拆分,每个部门是一个单独的工作表,或者每个部门整理的工作表汇总为一份总的工作表。读者需要注意的是,多个工作表的拆分与合并,始终在一个工作簿内操作。让我们一起通过Pandas库来实现。
本例目标:根据指定的Excel文件按照部门拆分成多个工作表,其次,根据多个工作表合并成一个工作表。
最终效果:按照部门生成工作表。
技术点:groupby()方法的使用,Excel的追加模式等。
代码编写方式:采用函数、面向过程方式编写。
接下来我们一起进行代码编写,通过2步搞定这个程序。
![33c95cff9ab99e8a0a8451a11e5e0bc6.png](https://i-blog.csdnimg.cn/blog_migrate/b5ece4287533c51f1fc320f5cc68d64f.jpeg)
(1)按照部门进行分组DataFrame。
我们用到了分组这个知识点,直接使用groupby()方法对部门列做分组,分组后的数据包含部门名称和分部门的DataFrame,避免了循环获取数据的办法。
groupby()方法使用如下所示。
![d78f3b284a679a81587bc0c27e9ee4a8.png](https://i-blog.csdnimg.cn/blog_migrate/91e798de91ffcf7822b766b4e6e18dc3.jpeg)
#数据按部门划分为DataFrame.
grouped = df.groupby('department')
print(grouped.get_group('技术部'))
for name,group in df.groupby('department'):
print(name,group)
代码执行结果后,name值为人事部、技术部等,group为人事部、技术部对应的DataFrame。请读者自行测试验证。
(2)工作表的拆分。
真正的代码来了,核心代码仅需5行。
通过下段代码演示工作表的拆分,源代码见example_split.py。
import pandas as pd
import os
curpath = os.path.dirname(__file__)
filename = os.path.join(curpath, 'example_merge.xlsx')
savefilename = os.path.join(curpath, 'example_merge_1.xlsx')
//就这5句
df=pd.read_excel(filename)
writer = pd.ExcelWriter(savefilename,engine='openpyxl', mode='a')
for name,group in df.groupby('department'):
group.to_excel(writer,name)
writer.save()
代码执行后生成example_merge_1.xlsx,文件内容如图所示。
![934d88c356b242f359bbcdc6924c6dc4.png](https://i-blog.csdnimg.cn/blog_migrate/42d0538f25220202c44a21119abaa4af.jpeg)
![9167e30b7ce306af203c6a3adc3b01d7.png](https://i-blog.csdnimg.cn/blog_migrate/090335d527fc45905031ac35ce44be4b.jpeg)