PHP速学视频免费教程(入门到精通)
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
本文介绍了如何使用Python计算CSV文件中员工在特定月份(例如2月)的办公时长,重点在于处理时间数据、按ID分组以及计算时间差。文章提供了详细的代码示例,展示了如何读取CSV文件、解析日期时间字符串、按ID聚合数据,并最终计算出每个ID在指定月份的总办公时长。同时,也提醒了数据清洗和异常处理的重要性。
本教程将引导你使用Python计算CSV文件中每个ID在特定月份(例如2月)的办公时长。我们将不使用Pandas库,而是使用Python内置的csv和datetime模块。
1. 数据准备
首先,我们需要一个包含ID、类型(in或out)和时间的数据集。例如,你的data.csv文件可能如下所示:
id,type,time 1,out,2023-01-01T08:01:28.000Z 1,in,2023-02-01T08:01:28.000Z 2,in,2023-02-01T09:04:16.000Z 2,out,2023-02-01T12:01:28.000Z 1,out,2023-02-01T13:34:15.000Z
2. 代码实现
以下是计算办公时长的Python代码:
import datetime import csv date_format = '%Y-%m-%dT%H:%M:%S.%fZ' total_time = {} feb = datetime.datetime.strptime('2023-02', '%Y-%m').month file_path = 'data.csv' with open(file_path, 'r') as f: csv_file = csv.DictReader(f) list_of_dict = list(csv_file) for d in list_of_dict: w_id = d['id'] dt = datetime.datetime.strptime(d['time'], date_format).date() d_time = datetime.datetime.strptime(d['time'], date_format) if d_time.month == feb: if not total_time.get(w_id): total_time[w_id] = {"date": None,"last_in": None, "last_out": None, "work_hour_s": 0. , 'work_hour_string': '' } update_time = total_time[w_id] update_time['date'] = dt if d['type'] == 'in': update_time['last_in'] = d_time if d['type'] == 'out': update_time['last_out'] = d_time if update_time['last_out'] and update_time['last_in']: if update_time['last_out'] > update_time['last_in']: work_hour_s = update_time['last_out'] - update_time['last_in'] update_time['work_hour_s'] += work_hour_s.seconds up_time = int(update_time['work_hour_s']) hours, remainder = divmod(up_time, 3600) minutes, seconds = divmod(remainder, 60) formatted_duration = f"{hours:02d}:{minutes:02d}:{seconds:02d}" update_time['work_hour_string'] = formatted_duration print(total_time)
代码解释:
3. 输出结果
运行上述代码后,你将得到类似以下输出:
{'1': {'date': datetime.date(2023, 2, 1), 'last_in': datetime.datetime(2023, 2, 1, 8, 1, 28), 'last_out': datetime.datetime(2023, 2, 1, 13, 34, 15), 'work_hour_s': 19967.0, 'work_hour_string': '05:32:47'}, '2': {'date': datetime.date(2023, 2, 1), 'last_in': datetime.datetime(2023, 2, 1, 9, 4, 16), 'last_out': datetime.datetime(2023, 2, 1, 12, 1, 28), 'work_hour_s': 10632.0, 'work_hour_string': '02:57:12'}}
4. 注意事项
5. 总结
本教程展示了如何使用Python的csv和datetime模块计算CSV文件中每个ID在特定月份的办公时长。通过本教程,你应该能够理解如何读取CSV文件、解析日期时间字符串、按ID聚合数据以及计算时间差。 请记住,在实际应用中,你需要根据你的具体需求来调整代码,并处理可能出现的异常情况。
Python免费学习笔记(深入):立即学习
在学习笔记中,你将探索 Python 的核心概念和高级技巧!
已抢221个
抢已抢29394个
抢已抢3420个
抢已抢3527个
抢已抢5791个
抢