Python 从文件读取时间

Python 从文件读取时间,python,datetime,time,Python,Datetime,Time,我需要帮助按日期对数据进行分组,以查找每个ID的工作天数和总工作小时数。我的数据在一个txt文件中。下面提供了我的数据示例: ID、日期、开始时间、结束时间 1,02/11/2019,08:25,16:24 1,03/11/2019,07:54,16:20 1,04/11/2019,07:46,16:08 1,05/11/2019,08:13,16:10 1,06/11/2019,07:48,15:24 1,08/11/2019,08:27,15:26 1,09/11/2019,08:25,16

我需要帮助按日期对数据进行分组,以查找每个
ID
工作天数和
总工作小时数。我的数据在一个txt文件中。下面提供了我的数据示例:

ID、日期、开始时间、结束时间
1,02/11/2019,08:25,16:24
1,03/11/2019,07:54,16:20
1,04/11/2019,07:46,16:08
1,05/11/2019,08:13,16:10
1,06/11/2019,07:48,15:24
1,08/11/2019,08:27,15:26
1,09/11/2019,08:25,16:02
1,10/11/2019,07:49,15:03
1,11/11/2019,08:18,15:29
1,12/11/2019,07:54,16:21
1,15/11/2019,07:50,16:24
1,16/11/2019,07:48,16:25
1,17/11/2019,08:25,15:28
1,19/11/2019,07:49,16:10
1,21/11/2019,08:11,15:06
1,22/11/2019,07:58,15:29
1,23/11/2019,07:49,15:20
1,24/11/2019,08:28,16:28
1,26/11/2019,08:29,16:14
1,27/11/2019,07:59,15:18
1,28/11/2019,07:53,16:24
1,29/11/2019,07:49,16:25
1,30/11/2019,08:25,15:08
1,31/11/2019,08:10,16:09
2,01/11/2019,07:58,15:22
2,02/11/2019,07:53,16:16
2,03/11/2019,08:13,15:05
2,04/11/2019,07:54,16:04
我需要的最终输出示例如下所示:

ID、工作小时数、工作天数
1,168,24 

一周来,我一直在尝试使用列表和字典,但一直没有找到解决方案。非常感谢使用datetime方法的任何帮助

如果您确定每个id的输入中的时间戳不重复或重叠

此解决方案存储id:hout工作正常,应易于在小时->天之间传输

from datetime import datetime

testlist = [
    [1,"02/11/2019","08:25","16:25"],
    [1,"03/11/2019","07:25","16:25"],
    [2,"02/13/2019","08:25","17:25"],
    [2,"03/13/2019","06:25","16:25"]
]

fmt = '%H:%M'
dictx = {}
for time in testlist:
    if time[0] not in dictx:
        dictx[time[0]] = 0
    tstamp1 = datetime.strptime(time[2], fmt)
    tstamp2 = datetime.strptime(time[3], fmt)
    dictx[time[0]] += int(round((tstamp2 - tstamp1).total_seconds()) / 3600)

print(dictx)

如果您确定每个id的输入中的时间戳不重复或重叠

此解决方案存储id:hout工作正常,应易于在小时->天之间传输

from datetime import datetime

testlist = [
    [1,"02/11/2019","08:25","16:25"],
    [1,"03/11/2019","07:25","16:25"],
    [2,"02/13/2019","08:25","17:25"],
    [2,"03/13/2019","06:25","16:25"]
]

fmt = '%H:%M'
dictx = {}
for time in testlist:
    if time[0] not in dictx:
        dictx[time[0]] = 0
    tstamp1 = datetime.strptime(time[2], fmt)
    tstamp2 = datetime.strptime(time[3], fmt)
    dictx[time[0]] += int(round((tstamp2 - tstamp1).total_seconds()) / 3600)

print(dictx)

如果你能使用熊猫图书馆,你可以做一些事情

import pandas as pd
df=pd.read_csv('filename.csv')
df['Duration']=(pd.to_datetime(df['End Time'], format='%H:%M')-pd.to_datetime(df['Start Time'], format='%H:%M')).dt.components['hours']
df.groupby('ID').Duration.agg('sum')
result=df.groupby('ID').agg({'Duration': ['sum'], 'Date': ['count']})
在这里,我们将文件读入pandas数据框,创建一列,其中包含开始时间和结束时间的timedelta值,然后按“ID”分组,并聚合列“Duration”的总和和列“Date”的计数,因为这给出了工作天数

输出应该如下所示-

   Duration  Date
        sum count
ID               
1       174    24
2        29     4

如果你能使用熊猫图书馆,你可以做一些事情

import pandas as pd
df=pd.read_csv('filename.csv')
df['Duration']=(pd.to_datetime(df['End Time'], format='%H:%M')-pd.to_datetime(df['Start Time'], format='%H:%M')).dt.components['hours']
df.groupby('ID').Duration.agg('sum')
result=df.groupby('ID').agg({'Duration': ['sum'], 'Date': ['count']})
在这里,我们将文件读入pandas数据框,创建一列,其中包含开始时间和结束时间的timedelta值,然后按“ID”分组,并聚合列“Duration”的总和和列“Date”的计数,因为这给出了工作天数

输出应该如下所示-

   Duration  Date
        sum count
ID               
1       174    24
2        29     4

你能使用熊猫图书馆吗?如果是,请查看它。请展示您尝试过的内容,描述您在使用它时遇到的问题,并询问有关该代码的特定问题。因此,您的最终结果应该是ID、总工作天数和总工作小时数?您的文件是文本文件还是csv文件?尝试编写代码,如果遇到错误,请告诉我们。这里有一个提示->你能使用熊猫图书馆吗?如果是,请查看它。请展示您尝试过的内容,描述您在使用它时遇到的问题,并询问有关该代码的特定问题。因此,您的最终结果应该是ID、总工作天数和总工作小时数?您的文件是文本文件还是csv文件?尝试编写代码,如果遇到错误,请告诉我们。这里有一个提示->这正是我想要的,但当我尝试这段代码时,它不起作用!显示了一个(KeyError:‘End Time’)我不知道为什么,我从未与panda合作过,如果有datetime或Time方法的话@PyCoder此代码有效。您能将整个错误粘贴到原始帖子中作为编辑吗?@PyCoder KeyErrors通常表示获取密钥时出错,此处为“结束时间”(列名)。csv中的标题行拼写是否正确?注意,它是区分大小写的。这正是我想要的,但当我尝试这段代码时,它不起作用!显示了一个(KeyError:‘End Time’)我不知道为什么,我从未与panda合作过,如果有datetime或Time方法的话@PyCoder此代码有效。您能将整个错误粘贴到原始帖子中作为编辑吗?@PyCoder KeyErrors通常表示获取密钥时出错,此处为“结束时间”(列名)。csv中的标题行拼写是否正确?请注意,它区分大小写。