下面是详细的Python实现自动化处理每月考勤缺卡数据的攻略。
一、前置条件
为了能够完整地实现该功能,需要满足以下前置条件:
- 对Python编程语言有一定的了解
- 安装Python的pandas和openpyxl包
- 存在考勤数据文件,且该文件的一行对应一条考勤记录,每行包含员工姓名、打卡时间、上下班标志等信息。
二、实现步骤
- 导入所需的包
在Python程序中,需要先导入以下两个包:
import pandas as pd
from openpyxl import load_workbook
其中,pandas和openpyxl分别用来处理数据和操作Excel文件。
- 读取考勤数据文件
考勤数据会存在如Excel文件等常规数据文件中,因此,需要使用pandas来读取该文件。
df = pd.read_excel(r'考勤数据.xlsx')
- 按月份进行筛选
一般来说,需要对每个月的考勤数据进行处理,因此,需要通过pandas的筛选功能,对考勤数据进行按月份的筛选。
month = '202201'
df['month'] = df['打卡时间'].apply(lambda x: str(x)[:6])
df = df[df['month']==month]
上述代码会创建一个新的’month’列,用来存储每条考勤记录的对应月份。之后,再根据’month’列进行筛选即可。
- 统计缺卡人员及缺卡时间
缺卡数据一般指某个员工的某天既没有上班打卡,也没有下班打卡。因此,需要对每个人每天的考勤记录进行统计,以确定缺卡时间。
def is_missed(row):
if row['上班'] == 0 and row['下班'] == 0:
return row['打卡时间'].strftime('%Y-%m-%d')
return None
df['missed'] = df.apply(is_missed, axis=1)
missed_df = df.dropna(subset=['missed'], axis=0)
在上述代码中,首先定一个is_missed函数,用来判断考勤记录是否为缺卡数据。如果某个考勤记录确实为缺卡,那么就将该记录的日期保存在新的missed列中。最后,通过使用dropna函数来去掉missed列中的缺失值,即可得到所有的缺卡数据。
- 将缺卡数据写入Excel
最后,可以将所有的缺卡数据写入Excel中。
book = load_workbook(r'考勤缺卡统计.xlsx')
writer = pd.ExcelWriter(r'考勤缺卡统计.xlsx', engine='openpyxl')
writer.book = book
if 'Sheet1' in book.sheetnames:
book.remove(book['Sheet1'])
missed_df.to_excel(writer, index=False)
writer.save()
在上述代码中,首先需要加载考勤缺卡统计的Excel文件,然后使用pandas将缺卡数据写入Excel。最后,保存Excel文件,即可完成自动化处理每月考勤缺卡数据。
三、示例说明
- 示例一:处理本月缺卡人员
假设现在需要处理2022年1月份考勤数据,可以通过执行以下代码来生成考勤缺卡统计表:
import pandas as pd
from openpyxl import load_workbook
df = pd.read_excel(r'考勤数据.xlsx')
month = '202201'
df['month'] = df['打卡时间'].apply(lambda x: str(x)[:6])
df = df[df['month']==month]
def is_missed(row):
if row['上班'] == 0 and row['下班'] == 0:
return row['打卡时间'].strftime('%Y-%m-%d')
return None
df['missed'] = df.apply(is_missed, axis=1)
missed_df = df.dropna(subset=['missed'], axis=0)
book = load_workbook(r'考勤缺卡统计.xlsx')
writer = pd.ExcelWriter(r'考勤缺卡统计.xlsx', engine='openpyxl')
writer.book = book
if 'Sheet1' in book.sheetnames:
book.remove(book['Sheet1'])
missed_df.to_excel(writer, index=False)
writer.save()
执行上述代码后,程序会自动读取考勤数据文件,并根据2022年1月份的打卡记录,筛选出该月的考勤数据。然后,通过is_missed函数判断每条考勤记录是否为缺卡数据,最后,将所有的缺卡数据保存在Excel文件中。
- 示例二:快速处理多个月份的考勤缺卡数据
如果需要处理多个月份的考勤缺卡数据,可以将上述代码封装成一个函数,然后循环调用该函数即可。具体实现代码如下所示:
import pandas as pd
from openpyxl import load_workbook
def handle_missed_data(file_path, month):
df = pd.read_excel(file_path)
df['month'] = df['打卡时间'].apply(lambda x: str(x)[:6])
df = df[df['month']==month]
def is_missed(row):
if row['上班'] == 0 and row['下班'] == 0:
return row['打卡时间'].strftime('%Y-%m-%d')
return None
df['missed'] = df.apply(is_missed, axis=1)
missed_df = df.dropna(subset=['missed'], axis=0)
book = load_workbook(r'考勤缺卡统计.xlsx')
writer = pd.ExcelWriter(r'考勤缺卡统计.xlsx', engine='openpyxl')
writer.book = book
if 'Sheet1' in book.sheetnames:
book.remove(book['Sheet1'])
missed_df.to_excel(writer, index=False)
writer.save()
file_path = r'考勤数据.xlsx'
months = ['202201', '202202', '202203']
for month in months:
handle_missed_data(file_path, month)
该代码会执行以下操作:
- 读取考勤数据文件
- 循环遍历每个月份
- 根据月份筛选出考勤数据
- 统计缺卡人员及缺卡时间
- 将缺卡数据写入Excel。
通过执行上述代码,可以比较快速地处理多个月份的考勤缺卡数据。