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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:20:27