问:Python CSV,根据条件显示一天内 CSV 不同时间范围的结果



可以在此处查看示例CSV文件

我有什么:我的 python 代码根据当前值检查工作持续时间

import csv
from datetime import date,time,datetime 
import pandas as pd
import matplotlib.pyplot as plt
def print_output(df):
worktime = len(df.loc[df['AC_Input_Current'] >= 4.9])
noworktime = len(df) - worktime
print ('Daily record: n')
print ('Start: ', df.index.min(), ' - ', 'End:', df.index.max())
print ('%.2f' %(worktime/60),'[in Mins]',' or ','%.2f' %(worktime/3600),'[Hrs]',' of work') 
print ('%.2f' %(noworktime/60),'[in Mins]',' or ','%.2f' %(noworktime/3600),'[Hrs]',' of no work done')
print ('Total duration recorded: ','%.2f' %((noworktime + worktime)/60),'[Mins]',' or ','%.2f' %((noworktime + worktime)/3600),'[Hrs]n')
dateparse = lambda x: pd.datetime.strptime(x, '%d/%m/%Y %H:%M:%S')
Data = pd.read_csv('MainD2.csv', parse_dates=['Time_Stamp'], date_parser = dateparse, index_col='Time_Stamp')

Data.resample('D').apply(lambda x: print_output(x))

运行代码后的结果如下: 我在以分钟为单位的持续时间内获得的结果是我想稍微调整一下,但我不确定如何调整。 例如:下面的第一个结果从2017-06-21 01:09:21开始到2017-06-21 23:15:04

我想得到但不知道如何: - 例如,基于第一个结果;我需要从23:15:0401:09:2108:00:0012:30:0012:31:0013:12:0013:12:0118:30:0019:30:0023:59:59- 如果没有从00:00:0001:09:20的值,请忽略它们并根据所需的时间继续获得结果(上述语句)。

Start:  2017-06-21 01:09:21  -  End: 2017-06-21 23:15:04
43.75 [in Mins]  or  0.73 [Hrs]  of work
161.63 [in Mins]  or  2.69 [Hrs]  of no work done
Total duration recorded:  205.38 [Mins]  or  3.42 [Hrs]
Start:  2017-06-22 00:38:54  -  End: 2017-06-22 05:47:29
30.25 [in Mins]  or  0.50 [Hrs]  of work
271.40 [in Mins]  or  4.52 [Hrs]  of no work done
Total duration recorded:  301.65 [Mins]  or  5.03 [Hrs]
Start:  2017-06-23 00:39:50  -  End: 2017-06-23 23:10:15
44.23 [in Mins]  or  0.74 [Hrs]  of work
263.35 [in Mins]  or  4.39 [Hrs]  of no work done
Total duration recorded:  307.58 [Mins]  or  5.13 [Hrs]
Start:  2017-06-24 00:38:10  -  End: 2017-06-24 13:33:49
77.83 [in Mins]  or  1.30 [Hrs]  of work
120.00 [in Mins]  or  2.00 [Hrs]  of no work done
Total duration recorded:  197.83 [Mins]  or  3.30 [Hrs]
Start:  2017-06-25 09:54:25  -  End: 2017-06-25 20:16:05
75.62 [in Mins]  or  1.26 [Hrs]  of work
131.28 [in Mins]  or  2.19 [Hrs]  of no work done
Total duration recorded:  206.90 [Mins]  or  3.45 [Hrs]
Start:  2017-06-26 00:51:32  -  End: 2017-06-26 01:05:55
9.18 [in Mins]  or  0.15 [Hrs]  of work
4.92 [in Mins]  or  0.08 [Hrs]  of no work done
Total duration recorded:  14.10 [Mins]  or  0.23 [Hrs]

由于您使用的是datetime,看来此解决方案应该适合您:

https://stackoverflow.com/a/35203658/2805387

例如

df[(df['date']>datetime.date(year=2017,month=6,day=24,hour=8,min=0)) & (df['date']<datetime.date(year=2017,month=6,day=24,hour=12,min=30))]

df[(df['date']>datetime.date(year=2017,month=6,day=24,hour=12,min=31)) & (df['date']<datetime.date(year=2017,month=6,day=24,hour=13,min=12))]

依此类推,适用于所有所需的范围

请注意,在该答案中,数据框中日期的列只是'date',如果您的日期列具有不同的名称,则必须使用该名称而不是当然。

最新更新