分享

实例3:从Excel薪资总表中自动分拆成各部门的表并保存

 Four兄 2019-08-25

    公司人事部的妹子经常需要给各部门经理提供其部门人员的情况,比如薪资、背景等。这些信息都是保密的,只能让部门经理知道,因此是不可能将总表发给他们,让他们自己筛选查看的。通常的做法就是在Excel中建个数据透视表,然后按不同经理或部门逐个筛选,复制粘贴到新的Excel文件中,分别发给各部门经理。这个纯体力活,让程序去干就好了

    下面我们就来将公司的薪资按部门汇总,并自动生成各部门的Excel文件。代码总共只需要5行,非常简单高效。

import pandas as pd
df = pd.read_excel('data\salary_info.xlsx')
df.head()
工号姓名部门薪资经理
0701001王波工程部8900李飞
1701002刘海洋生产部6000刘晓丽
2701003少和光品质部6000张春香
3701004真凡巧仓务部4700李国际
4701005鲁鸿运船务部5500王明

    首先导入pandas库。Pandas是一个用于数据分析的功能非常强大的python包,是数据分析的必学必备工具。这些了解一下即可,总之它们就是一个工具,能为我所用,能解决问题行,无需深入了解,只需要了解我们要使用的部分就行了。

    为方便后续代码的书写,惯常做法是给导入的库起个“绰号”,比如import pandas as pd的意思是导入pandas库,并取绰号为'pd',这样在后续的程序中直接用pd就可以代表pandas。

    然后我们使用pd.read_excel读取Excel文件,可直接将Excel文件读取为一个数据框(DataFrame)。可以理解数据框就是一张Excel表,请看上图,是不是很像我们常用的Excel表格呢?我们用df.head()看一下它的前5行,以便观察是否有正确读取。看起来是一切正常的。

    下面我们就按不同的经理来将这些数据拆分成不同的表格并单独保存,以便通过邮件的方式发给对应的经理。当然也可以按部门来拆分,原理是类似的。总表及拆分后的表如下图所示。可见拆分操作在不到1秒之内就全部完成了,堪称神速....

#拆分Excel表,并单独保存
managers=df['经理'].unique()
for manager in managers:
df[df['经理']==manager].to_excel('data\salary_info_{}.xlsx'.format(manager),index=False)
print('完成!')

    因为在总表中,经理的名下有很多员工,因此经理的名字是重复的,我们只需要获得所有经理的名字一次就够了,unique()就可以实现。df['经理'].unique()可以理解为,从工作表中选取列名为“经理”的列,然后每个经理只取一次名字,然后存入manager这个数组。

managers
>>array(['李飞', '刘晓丽', '张春香', '李国际', '王明', '朱柳峰'], dtype=object)

    然后我们将经理的名字逐个传入数据表,并逐个保存成新的Excel文件。df.to_excel()可实现将数据框存储为Excel文件。括号内的参数为需要存入的路径和文件名,此处我们希望把经理的名字放在文件名里面以便区分,所以使用格式化字符串函数.format将经理的名字传入文件名。我们不想在Excel中显示数据框的索引,因此index设为False。分拆后的Excel表如下图所示,分拆成功。

对于格式化字符串函数.format,可通过如下例子理解。即我们在前面字符串中放一个'{}',然后format()括号内的“”就是要放入'{}'中的值。

print('你好,{}!'.format('世界'))
>>你好,世界!

所有源代码和说明都在Jupyter notebook上完成,所用到的Excel 资料已上传GitHub, 欢迎Fork或下载到本地随意玩。。。转载请注明出处,谢谢。

GitHub链接:

https://github.com/weidylan/Office_Automation_by_Using_Python

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多