【问题标题】:How to iterate through date time stamp and calculate no of hours in each day using python如何使用python迭代日期时间戳并计算每天的小时数
【发布时间】:2021-06-12 18:57:01
【问题描述】:

我有一个脚本来查找记录的机器工作时间。该脚本加载机器生成的不同原始文件,并最终创建数天的数据和时间戳列。现在我想遍历日期和时间列并打印每天的营业时间。

import op
from tqdm import tqdm
import matplotlib.pyplot as plt
import datetime

data=op.getting_files()
data= list(data)
l=len(data)
for i in tqdm(range(l)):
    f=data[i]
    df=pd.read_csv(f)
    df.head(500)
    df1=df[['Date','Time','TEMPPV','RHPV']]
    df2=df1.rename(columns={"TEMPPV": "Module Temperature", "RHPV": "Rel Humidity"})
    df3 = df2[(df2["Module Temperature"] > 83)& (df2["Module Temperature"] <87)]
    df4 =df2[(df2["Rel Humidity"] > 80)&(df2["Rel Humidity"] <90)]
   #df4 =df2[(df2["Rel Humidity"] > 83)& (df2["Rel Humidity"] <87)]]
    df4['DateTime'] = pd.to_datetime(df4.pop('Date')) + pd.to_timedelta(df4.pop('Time'))
    op.append_df_to_excel('Dh summary.xlsx',df4,index=False)

运行脚本后,输出如下所示

输出

现在我想遍历整个日期时间列并计算每天的营业时间并打印出来。

生成的最终文件可在下面的链接中找到,

https://drive.google.com/file/d/1cpHhJJa6FF0rBSeEzv-7D5JoLmztOoLv/view?usp=sharing

【问题讨论】:

  • 您能以文本形式发布示例数据吗?
  • @crayxt 在分享链接中添加了文件
  • 我在您的帖子中考虑了一个文字数据 sn-p,但无论如何都可以。

标签: python pandas datetime


【解决方案1】:

这里的问题是您要如何计算营业时间?

首先,我们可以每天对数据帧进行分组并计算每天的记录数。这将提供一些图片。

>>> df.groupby(df.DateTime.dt.floor('d')).count()
            Module Temperature  Rel Humidity  DateTime
DateTime
2021-05-13                  18            18        18
2021-05-14                1391          1391      1391
2021-05-15                1440          1440      1440
2021-05-16                1440          1440      1440
2021-05-17                1396          1396      1396

如果我们检查minmax 的值,我们可以看到如果日期为 14、17,它们是完整的,但由于上表中的计数小于 1440(24x6x60 = 一天中的分钟数) , 数据有一定差距。而且我们还没有检查可能的重复项。

>>> df.groupby(df.DateTime.dt.floor('d'))["DateTime"].agg([min, max])
                           min                 max
DateTime
2021-05-13 2021-05-13 04:29:00 2021-05-13 04:46:00
2021-05-14 2021-05-14 00:49:00 2021-05-14 23:59:00
2021-05-15 2021-05-15 00:00:00 2021-05-15 23:59:00
2021-05-16 2021-05-16 00:00:00 2021-05-16 23:59:00
2021-05-17 2021-05-17 00:00:00 2021-05-17 23:59:00

更新:好的,由于数据是分钟级别的,我们可以每天对记录进行排序、删除重复和计数,从而为您提供以分钟为单位的时间。

>>> df = df.sort_values(by="DateTime")
>>> df = df[~df.DateTime.duplicated()]
>>> df.groupby(df.DateTime.dt.floor('d'))["DateTime"].agg("count")
DateTime
2021-05-13      18
2021-05-14    1391
2021-05-15    1440
2021-05-16    1440
2021-05-17    1396

【讨论】:

  • 其实数据的顺序不对。我的意思是,数据和时间戳之间存在差距。有些日子,由于停电,没有记录数据。因此,要计算总营业时间,我需要遍历每个日期并计算当天的小时数,然后将整个日期和时间的总小时数相加。 .
猜你喜欢
  • 2020-05-02
  • 1970-01-01
  • 2017-01-22
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2017-04-19
  • 1970-01-01
相关资源
最近更新 更多