You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将考勤时间戳导入Pandas DataFrame并计算员工总工时

用Pandas计算员工总工时

步骤1:导入数据并处理重复列名

CSV中重复的In/Out列,Pandas会自动添加后缀(如In.1、Out.1),先读取数据:

import pandas as pd

# 读取考勤CSV文件,指定第一行为列名
df = pd.read_csv('考勤数据.csv', header=0)

步骤2:分离In/Out列

自动筛选所有In开头和Out开头的列,适配任意数量的考勤列:

in_cols = [col for col in df.columns if col.startswith('In')]
out_cols = [col for col in df.columns if col.startswith('Out')]

步骤3:转换时间字符串为datetime类型

处理带a.m./p.m.的时间格式,同时自动忽略格式错误的无效值:

# 转换In列时间,适配MM/DD/YYYY 12小时制格式
df[in_cols] = df[in_cols].apply(pd.to_datetime, format='%m/%d/%Y %I:%M:%S %p', errors='coerce')
# 转换Out列时间,errors='coerce'将错误格式转为NaT(无效时间)
df[out_cols] = df[out_cols].apply(pd.to_datetime, format='%m/%d/%Y %I:%M:%S %p', errors='coerce')

步骤4:计算每位员工总工时

对每行所有Out时间求和,减去所有In时间的和,最终转换为小时数:

# 计算总工时:Out时间总和 - In时间总和,转成小时
df['总工时(小时)'] = (df[out_cols].sum(axis=1) - df[in_cols].sum(axis=1)).dt.total_seconds() / 3600

# 输出结果
print(df[['姓名', '总工时(小时)']])

补充说明

  • 若需要保留原始时间差格式(如2 days 4 hours),可去掉.dt.total_seconds() / 3600,直接保留差值结果
  • 该方法自动适配任意数量的In/Out列,处理数百列数据也能保持高效

内容的提问来源于stack exchange,提问作者Clare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 17:35:26