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

使用Pandas拆分考勤时间为InTime和OutTime列

考勤数据处理解决方案(Pandas实现)

1. 数据预处理:解析时间并去重

首先将原始日期字符串转换为可操作的datetime格式,提取日期、时段(AM/PM),同时去除同一用户同一时段的重复打卡记录:

import pandas as pd

# 读取原始数据
df = pd.read_csv('input.csv', encoding="utf-8", sep=',')

# 解析日期时间(注意格式匹配你的数据,示例格式为"Thu 1/09 9:10 AM")
df['datetime'] = pd.to_datetime(df['Date'], format='%a %d/%m %I:%M %p')

# 提取纯日期、时段字段
df['date'] = df['datetime'].dt.date
df['period'] = df['datetime'].dt.strftime('%p')

# 去重:同一用户+同一日期+同一时段,保留最早打卡记录
df = df.sort_values('datetime').drop_duplicates(subset=['User', 'date', 'period'], keep='first')

2. 拆分InTime/OutTime列

通过透视表将AM/PM时段转换为独立列,自动处理缺失时段的空值:

# 生成透视表,按用户+日期分组,AM对应InTime,PM对应OutTime
pivot_df = df.pivot_table(
    index=['User', 'date'],
    columns='period',
    values='Date',
    aggfunc='first'
).reset_index()

# 重命名列名符合需求
pivot_df = pivot_df.rename(columns={'AM': 'InTime', 'PM': 'OutTime'})

3. 补全考勤周期内的所有日期

生成考勤周期内的完整日期序列,与用户记录合并,补全无打卡的空记录:

# 获取考勤周期的起止日期
start_date = df['date'].min()
end_date = df['date'].max()

# 生成周期内所有日期
all_dates = pd.date_range(start=start_date, end=end_date).date

# 创建用户+全日期的基础框架(笛卡尔积)
user_date_grid = pd.MultiIndex.from_product(
    [df['User'].unique(), all_dates],
    names=['User', 'date']
).to_frame(index=False)

# 合并补全空记录
final_df = pd.merge(
    user_date_grid,
    pivot_df,
    on=['User', 'date'],
    how='left'
)

4. 按用户生成独立CSV文件

遍历用户列表,导出每个用户的考勤记录:

# 用户ID与用户名映射
users = {
    'falcon': 2,
    'charlie': 3,
}

for username, user_id in users.items():
    # 筛选当前用户的记录,仅保留需要的列
    user_data = final_df[final_df['User'] == user_id][['InTime', 'OutTime']]
    # 导出CSV,适配Excel模板
    user_data.to_csv(f'{username}.csv', encoding='utf-8', sep=',', index=False)

特殊情况说明

  • 重复记录:若需保留最晚打卡记录,将drop_duplicates中的keep='first'改为keep='last'
  • 日期格式:若原始日期格式为月/日(如"Thu 9/1 9:10 AM"),需将pd.to_datetime的format参数改为%a %m/%d %I:%M %p
  • 空记录:未打卡日期的InTime/OutTime会显示NaN,Excel打开自动识别为空单元格,适配模板需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:01:09