每到月末和月初,HR 和财务小伙伴们的噩梦就降临了——做工资表。
你需要核对考勤数据、计算绩效奖金、扣除社保公积金……几个庞大的 Excel 表格来回切换,VLOOKUP 公式用到手软。最可怕的是,一旦手抖拖错了一行公式,或者某个月的表格格式变了一点点,一整天的努力可能就付诸东流。
既然这项工作每个月都在高度重复,为什么不把这些繁琐的机械劳动交给电脑自己做呢?
今天,我们就来聊聊如何用 Python 打造一个“全自动工资计算器”。只需写好一次代码,以后每个月只要把数据丢进文件夹,一键运行,喝杯咖啡的功夫,几百上千人的工资表瞬间生成!
🛠️ 第一步:准备我们的“数据处理工具”
在 Python 中,处理表格最强大的神器叫做 pandas。它不仅比 Excel 快得多,而且逻辑非常清晰。如果你的电脑上还没有安装,只需要在命令行输入一行代码:
pip install pandas openpyxl
安装完毕后,我们的自动化之旅就正式开始了。
📂 第二步:一秒读取所有数据表
通常,做工资表需要汇总多个维度的信息。假设这个月你有三个文件:
- 1.
基础薪资表.xlsx (包含工号、姓名、基本工资、部门) - 2.
本月考勤表.xlsx (包含工号、缺勤天数、绩效奖金) - 3.
社保扣款表.xlsx (包含工号、社保公积金扣款额)
在 Excel 里,你可能需要新建一个总表,然后疯狂 VLOOKUP。而在 Python 中,只需要这几句代码:
import pandas as pd# 1. 瞬间读取三个 Excel 表格df_salary = pd.read_excel('基础薪资表.xlsx')df_attendance = pd.read_excel('本月考勤表.xlsx')df_insurance = pd.read_excel('社保扣款表.xlsx')
🔗 第三步:告别 VLOOKUP,数据自动匹配
接下来,我们需要把这三个表拼接在一起。在 Python 里,这个操作叫做 merge(合并)。我们只需要告诉 Python:“请根据【员工工号】把它们拼起来!”
# 2. 以“员工工号”为基准,合并所有表格df_merged = pd.merge(df_salary, df_attendance, on='员工工号', how='left')df_merged = pd.merge(df_merged, df_insurance, on='员工工号', how='left')# 为了防止有些员工没有扣款或缺勤导致数据为空(NaN),我们把空值统一填补为 0df_merged.fillna(0, inplace=True)
提示: 这里的 how='left' 确保了以基础薪资表为准,即便某个人这个月没有考勤记录,他的基础信息也不会丢失。
🧮 第四步:植入核心计算逻辑
表格拼好后,就到了最关键的算钱环节。假设你们公司的工资计算公式是:实发工资 = 基本工资 + 绩效奖金 - (缺勤天数 × 200) - 社保扣款
用 Python 写公式,就像写普通的数学题一样直观,它会自动应用到表格的每一行,绝不会出现“漏拉公式”的低级错误:
# 3. 批量计算全员实发工资df_merged['实发工资'] = ( df_merged['基本工资'] + df_merged['绩效奖金'] - (df_merged['缺勤天数'] * 200) - df_merged['社保公积金扣款'])# 保留两位小数,让数据看起来更专业df_merged['实发工资'] = df_merged['实发工资'].round(2)
🚀 第五步:不仅能导出总表,还能“一键分发”
工资算完后,我们需要保存成 Excel。但 Python 的强大远不止于此!
很多 HR 每月算完工资后,还需要按部门把工资表拆分开,发给各个部门主管审核。如果公司有 20 个部门,手动拆分又是一项极其痛苦的工作。Python 可以用一个循环,在 1 秒内帮你搞定:
# 4. 导出最终的总工资表df_merged.to_excel('10月最终工资明细表.xlsx', index=False)# 进阶功能:按“部门”自动拆分表格!for dept, group in df_merged.groupby('部门'): # 将每个部门的数据保存为一个单独的文件 file_name = f'{dept}_10月工资表.xlsx' group.to_excel(file_name, index=False)
💡 总结
只要你把上面这段不到 30 行的代码保存为一个 compute_salary.py 文件。下个月,你只需要做两件事:
以前需要熬夜加班 3 小时核对的数据,现在只需要 3 秒钟就能完美搞定。节省下来的时间,拿去喝杯奶茶、刷刷剧,不香吗?
你的日常工作中有哪些“每个月都要重复做,烦得要死”的 Excel 操作?欢迎在评论区留言吐槽!下期我将挑选评论区点赞最多的痛点,用 Python 帮你解决!!
(如需定制开发脚本的欢迎私信留言^-^)