python 打卡记录代码_利用Python实现对考勤打卡数据处理的总结
利用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’)])
得到的结果如下,但是这样的数据不利于后期再处理。
这时候使用重置index函数reset_index把索引去掉
df4=df3.reset_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命令,大家打包的时候可以参考。
python 打卡记录代码_利用Python实现对考勤打卡数据处理的总结相关推荐
- python画pr曲线代码_利用Python中的numpy包实现PR曲线和ROC曲线的计算
闲来无事,边理解PR曲线和ROC曲线,边写了一下计算两个指标的代码.在 python 环境下,sklearn里有现成的函数计算ROC曲线坐标点,这里为了深入理解这两个指标,写代码的时候只用到numpy ...
- python画图皮卡丘代码_利用Python绘制萌萌哒的皮卡丘
开发工具 Python版本:3.6.4 相关模块: turtle模块. 环境搭建 安装Python并添加到环境变量即可. 在cmd窗口运行"pikachu.py"文件即可. 效果如 ...
- 手机用python画太阳花的代码_利用python绘制太阳花(蓝桥杯试题)
识别出图形中的基本形状,以基本形状为单位绘制出最终图形.绘制所示图形,中间是半径为120的圆, 四周是边长为80的12个菱形. 使用turtle绘制如图中所示的图形. 1) 背景为白色,中间圆为红色轮 ...
- python处理异常值的代码_利用Python进行异常值分析实例代码
异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值.常用检测方法3σ原则和箱型图.其中,3σ原则只适用服从正态分布的数据.在3σ原则下,异常值被定义为观察值和平均值的偏差超过3倍标准差 ...
- python计算面积代码_利用Python求阴影部分的面积实例代码
利用Python求阴影部分的面积实例代码 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 利用Python求阴影部分的面积实例代码.txt ] (友情提示:右键点 ...
- python制作心形照片墙_利用python生成照片墙的示例代码
PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...
- python怎么使用别人的代码_利用Python查看微信共同好友功能的实现代码
总有思路清奇的朋友存在,想实现查看微信共同好友: 由于之前分享的代码有获取过微信好友头像,所以当时第一反应是通过itchat微信接口获取好友信息,比对两个人的好友信息列表就可以实现了.按理说这么简单的 ...
- python做游戏代码_利用Python基础代码语句,实现2G时代文字小游戏,世界如此简单!...
相信许多80,90后都玩过2G时代的文字小游戏,它是来自QQ家园的专属回忆.偷菜,美味小镇,大乐斗,还有精武堂等等,虽然只是文字的输出,但是留给我们这一代的人的印象却是最深刻的.曾经流量很少,响应很快 ...
- python利用pandas合并excel表格代码_利用Python pandas对Excel进行合并的方法示例
前言 在网上找了很多Python处理Excel的方法和代码,都不是很尽人意,所以自己综合网上各位大佬的方法,自己进行了优化,具体的代码如下. 博主也是新手一枚,代码肯定有很多需要优化的地方,欢迎各位大 ...
最新文章
- gimp 去掉一个颜色的背景_不用背景图,PPT也能做的高大上?网友:看完这页PPT,我信了...
- ios8 UITableView section不显示
- 内存溢出和内存泄漏的区别、产生原因以及解决方案 转
- python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)...
- CCKS 2018 | 前沿技术讲习班
- PyTorch热身小案例
- 麦克风阵列声源定位 GCC-PHAT
- 多线程之 NSOperation
- 想入行SAP咨询,最具性价比的方式
- Verilog常用语法总结
- win8 安装双系统 ubuntu 过程
- git仓库创建及上传
- 与BB-8跨次元对话,三星Bixby亮相星球大战首映礼
- 测试流程如何有效落地?
- 牛牛的宝可梦Go(dp+floyd)
- DoIP的基本信息(一)
- 最强TI蓝牙5.0方案CC2652R芯片模块
- 如何改变图片的像素大小
- 如何无线接收服务器封包,大大通|如何抓取802.11a/b/g/n/ac 的无线网络封包
- 前端基本功---JS数据类型知多少
热门文章
- KVM虚拟化介绍和安装使用方法
- php股票公式,【图】请老师帮忙编写个选股公式_股票公式,选股公式,股票论坛,炒股软件,股票指标_指标编写互助答疑论坛_理想论坛 - 股票论坛...
- Docker中成功安装修罗Xiunobbs论坛步骤
- 日期,手机号码正则表达式校验,身份证校验等常用工具
- html页面拼接,表格数据
- 少儿编程培养孩子逻辑思维
- Excel只删除开头和末尾空格,中间不管的2种操作
- qt中二维数组的使用_文件数据通过qt将二维数组中的像素点显示成一张图片
- 2019第二届中国天津国际智慧消防高峰论坛
- 苹果或挖走Meta AR公关总监,2022年的头显是真的要来了?