我的知识记录

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 直接得到次数。
  • 按员工 groupbynunique("日期") 数有多少天打过卡(出勤天数),其他列 sum 累计次数。
  • 输出每人一行的汇总表,HR直接用。

运行结果

生成 9月考勤汇总.xlsx,每行一个员工,列出出勤天数、迟到/早退/缺卡次数,控制台打印预览。

注意事项

  • 时间规则按公司制度改,比如弹性工作制9:30上班就把9改成9:30。
  • 加班、出差、请假要单独扣减,本脚本只统计打卡数据,请假数据要另外合并。
  • 员工重名会被分到一组,建议用工号作为分组键。

Python Excel生成考勤统计汇总表

标签:

更新时间:2026-09-15 09:16:36

上一篇:Python Excel设置列宽行高自适应:内容不再被截断

下一篇:Python openpyxl 给 Excel 单元格添加批注方法