Python拆分Excel日期时间列并统计工作时长的实现方法问询
解决考勤数据处理的两个Python问题
1. 拆分合并的日期时间列为独立的日期、时间列
假设你用pandas处理表格数据(这是处理这类问题最常用的库),步骤如下:
- 先把
Tgl/Waktu列转换为datetime类型(如果原始数据是字符串格式):
import pandas as pd # 读取考勤数据(以csv为例,可根据文件类型调整) df = pd.read_csv("attendance_data.csv") # 转换为datetime类型,format参数根据你的实际日期格式调整,比如印尼常用%d/%m/%Y %H:%M df["Tgl/Waktu"] = pd.to_datetime(df["Tgl/Waktu"], format="%Y-%m-%d %H:%M:%S")
- 拆分出独立的日期和时间列:
# 新增日期列,仅保留日期部分 df["日期"] = df["Tgl/Waktu"].dt.date # 新增时间列,仅保留时间部分 df["时间"] = df["Tgl/Waktu"].dt.time
2. 计算每日及总工作时长
常规场景(每日两次打卡:上班+下班)
按日期分组,提取每组的最早(上班)和最晚(下班)打卡时间,计算时间差:
# 按日期分组,获取每组的最小、最大打卡时间 daily_hours = df.groupby("日期").agg( 上班时间=("Tgl/Waktu", "min"), 下班时间=("Tgl/Waktu", "max") ).reset_index() # 计算每日工作时长(转换为小时) daily_hours["每日工作时长(小时)"] = (daily_hours["下班时间"] - daily_hours["上班时间"]).dt.total_seconds() / 3600 # 计算总工作时长 total_work_hours = daily_hours["每日工作时长(小时)"].sum() print(f"总工作时长: {total_work_hours:.2f} 小时")
特殊场景(每日多次打卡:外出返回等)
如果同一天有多次打卡,可按顺序配对(第1次和第2次为一组,第3次和第4次为一组),再计算每组时长总和:
def calculate_daily_hours(group): # 按时间排序打卡记录 sorted_times = group["Tgl/Waktu"].sort_values().reset_index(drop=True) # 若打卡次数为奇数,忽略最后一条(可根据业务需求调整) if len(sorted_times) % 2 != 0: sorted_times = sorted_times[:-1] # 配对计算每次外出/工作的时长,再求和 work_intervals = sorted_times[1::2] - sorted_times[::2] return work_intervals.dt.total_seconds().sum() / 3600 # 应用到每个日期组 daily_hours = df.groupby("日期").apply(calculate_daily_hours).reset_index(name="每日工作时长(小时)") # 总工作时长 total_work_hours = daily_hours["每日工作时长(小时)"].sum()
内容的提问来源于stack exchange,提问作者Pckpow
相关产品推荐
相关产品推荐

