利用Python实现对考勤打卡数据处理的总结 您所在的位置:网站首页 上下班打卡表格 利用Python实现对考勤打卡数据处理的总结

利用Python实现对考勤打卡数据处理的总结

2024-06-10 14:51| 来源: 网络整理| 查看: 265

利用Python实现对考勤打卡数据处理的总结 一、背景交代二、说明三、 8种方法1. 查看文件是否存在2. 导入excel文件,并把数据保存为dataframe格式3. 计算程序运行时间4. 对格式为“年-月-日 时:分:秒”的时间进行截取5. 利用已有一列得到一个新列6. 数据聚合7. 数据合并(两个dataframe的合并)8. 程序运行完毕,自主决定关闭运行窗口 四、主要参考资料五、后记

一、背景交代

要处理的数据主要有两份,一份数据名称为考勤记录,另一份数据名称为打卡记录,目的是合并这两个组数据,呈现的是考勤数据样式,并进行简单的数据处理后输出。 考勤数据 考勤数据 打卡数据 打卡数据

二、说明

数据处理主要用的是Python的Numpy和Pandas两个模块。这里简单介绍了实现下面8种方法时所使用的函数,大多点到为止。具体函数的用法很容易在网上搜到或者在最后列出的资料中找到。本文作者非专业程序员,写这篇文章目的是对制作这一数据处理工具的过程进行总结,文中存在的不规范描述请大佬们谅解。

三、 8种方法 1. 查看文件是否存在

使用os模块 import os os.path.exists(test_file.txt) 存在返回True,否则False

2. 导入excel文件,并把数据保存为dataframe格式

import pandas as pd 读入:read_file=pd.read_excel(‘read_file.xlsx’) 保存为DataFrame:pd.DataFrame(pd.read_excel()) 如果excel文档,可以单独读入某个sheet并保存为DataFrame格式的数据 excelfile_import=’excelfile_import.xlsx’ pd.DataFrame(pd.read_excel(excelfile_import,sheet_name=’sheet1’)) 关于数据的操作包括排序等等,参考的文档是 像Excel一样使用python进行数据分析等。

3. 计算程序运行时间

使用datetime import datetime import datetime datetime.now() 计算当前时间,可以在程序的开始和结束部分各放置一个,赋给不同变量,两个值相减得到的时间差为程序的运行时间。 两个时间相减得到的时间差涉及类型是timedelta 使用timedelta的total_seconds方法可以获得以秒计数的时间 把秒转为分除以60即可,结果保留2位小数(runtime1是计算得到的时间差) round(runtime1.total_seconds()/60,2)

4. 对格式为“年-月-日 时:分:秒”的时间进行截取

原始数据:2018-09-05 20:13:09,所在列名称“上班时间” 直接截取会报错,先把这一列转为str pd.astype({‘上班时间’:’str’}) 如果是多于一列,则为pd.astype({‘上班时间’:’str’,’下班时间’:’str’}) 为了方便对列截取,设置了一个函数,截取的是前面的日期,提示一点,python中字符串的数据索引一般从0开始,截取一段时,一般是前闭后开。比如下面函数中的a[0,10] 截取的字符串第一个字符的索引是0,最后一个是9,默认步径是1. def sdata(a) return(a[0:10])

5. 利用已有一列得到一个新列

生成一个名字为 “日期”的新列,具体采用了dataframe的apply方法,还用到了匿名函数lambda。 df[‘日期’] = df.apply(lambda x:sdata(x[‘上班时间’]), axis=1) 除了根据已存在的一列得到一个新列,还有根据多列得到一个新列的方法,方法类似,搜索一下很容易找到,这里不再赘述。

6. 数据聚合

如背景所述,原始数据有两个文档,一个是考勤记录,一个是打卡记录。 如何处理打卡记录并处理为考勤数据样式,主要方法是数据聚合。 具体就是使用groupby函数, 设置索引:df1=df.groupby([‘工号’,‘姓名’,‘日期’]), 对某一个工号来说,正常一个日期会有两个打卡数据,一个是上班打卡,一个是下班打卡, 当然也可能多于2个,或者只有1个。 要处理的列是: df2=df1. [‘打卡时间’] 使用内置方法min和max,筛选出每个工号,每天第一次打卡和最后一次打卡,生成两个新列并分别命名为“上班打卡”“下班打卡”: df3=df2.agg([(‘上班打卡’,‘min’),(‘下班打卡’,‘max’)]) 得到的结果如下,但是这样的数据不利于后期再处理。 数据聚合1 这时候使用重置index函数reset_index把索引去掉 df4=df3.reset_index() 这样处理后得到如下形式的数据,实现了打卡数据向考勤数据的转化。 重置index 其实最初打算使用pandas的数据透视表(Pivot Tables)功能,但是没有找到重置index的方法,最终使用了数据聚合功能,很好的实现的目的。

7. 数据合并(两个dataframe的合并)

把处理过的打卡数据和考勤数据合并。 具体到这里就是把两个dataframe中,每个工号对应每天的打卡数据取并。 首先是合并,合并方法很多,经过比较使用了append方法。 简单合并后,如何实现上面取并的意图,删除当天重复的考勤数据。这里使用的是drop_duplicates方法,drop_duplicates的筛选条件可以是多列。

8. 程序运行完毕,自主决定关闭运行窗口

input(‘Press ’),其实加一行输入回车键的代码

四、主要参考资料 Python for Data Analysis 2nd Edition从Excel到Python–数据分析进阶指南https://blog.csdn.net/weixin_39000819/article/details/80942423 五、后记

在把写好的python程序打包成exe的过程中遇到了很多问题,特别是最后用pyinstaller的-F命令打包成一个单独的exe文件以后,在一些电脑上没有办法正常运行。经过一番折腾,尝试采用—D命令,也就是打包成一个文件夹的方法解决了这一问题。 主要参考资料中第3条给出的是网友总结的常用pyinstaller命令,大家打包的时候可以参考。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有