Python Excel生成考勤统计汇总表
从打卡明细自动生成考勤汇总表:每人出勤天数、迟到次数、早退次数、缺卡次数,一键统计,告别手动数打卡记录。
场景痛点
行政每月导出打卡机明细,几千条记录,要按人头统计出勤天数、迟到几次、早退几次、缺卡几次。手工数要花好几天。用Python按规则统计,十分钟出全公司考勤汇总表。
用到的库
pip install pandas openpyxl
完整代码
import pandas as pd
def attendance_summary(input_file, output_file):
df = pd.read_excel(input_file)
# 假设列:员工姓名, 日期, 上班打卡时间, 下班打卡时间
df["日期"] = pd.to_datetime(df["日期"])
df["上班打卡时间"] = pd.to_datetime(df["上班打卡时间"], errors="coerce")
df["下班打卡时间"] = pd.to_datetime(df["下班打卡时间"], errors="coerce")
# 规则:9点后算迟到,18点前算早退,缺卡=对应时间为空
def is_late(t):
return pd.notna(t) and t.hour >= 9 and (t.hour > 9 or t.minute > 0)
def is_early(t):
return pd.notna(t) and t.hour < 18
df["迟到"] = df["上班打卡时间"].apply(is_late).astype(int)
df["早退"] = df["下班打卡时间"].apply(is_early).astype(int)
df["上班缺卡"] = df["上班打卡时间"].isna().astype(int)
df["下班缺卡"] = df["下班打卡时间"].isna().astype(int)
# 按员工汇总
summary = df.groupby("员工姓名").agg(
出勤天数=("日期", "nunique"),
迟到次数=("迟到", "sum"),
早退次数=("早退", "sum"),
上班缺卡=("上班缺卡", "sum"),
下班缺卡=("下班缺卡", "sum")
).reset_index()
summary.to_excel(output_file, index=False)
print(summary)
print(f"考勤汇总完成 -> {output_file}")
if __name__ == "__main__":
attendance_summary("./9月打卡明细.xlsx", "./9月考勤汇总.xlsx")
代码讲解
- 先把时间列统一转成
datetime,否则字符串比较会错。 - 业务规则用函数定义清楚:9点后=迟到,18点前=早退,时间为空=缺卡。规则改起来只改函数。
- 生成4个0/1标记列,
sum直接得到次数。 - 按员工
groupby,nunique("日期")数有多少天打过卡(出勤天数),其他列sum累计次数。 - 输出每人一行的汇总表,HR直接用。
运行结果
生成 9月考勤汇总.xlsx,每行一个员工,列出出勤天数、迟到/早退/缺卡次数,控制台打印预览。
注意事项
- 时间规则按公司制度改,比如弹性工作制9:30上班就把9改成9:30。
- 加班、出差、请假要单独扣减,本脚本只统计打卡数据,请假数据要另外合并。
- 员工重名会被分到一组,建议用工号作为分组键。

更新时间:2026-09-15 09:16:36
上一篇:Python Excel设置列宽行高自适应:内容不再被截断