检查时间值是否介于Python中CSV文件中提到的两个值之间
这个问题可能看起来很难理解,但我会尽量让它简单。我得到了一个包含以下数据的CSV文件:检查时间值是否介于Python中CSV文件中提到的两个值之间,python,pandas,dataframe,csv,datetime,Python,Pandas,Dataframe,Csv,Datetime,这个问题可能看起来很难理解,但我会尽量让它简单。我得到了一个包含以下数据的CSV文件: Time,Meeting ID,Passcode 08:15, 953 2394 8317,091418 16:58, 953 2394 8317,091418 15:00, 807 028 8062,587838 20:02, 807 028 8062,587838 12:03, 961 8894 9557,806108 11:51, 961 8976 9546,098718 这里的第一件事是读取CSV数
Time,Meeting ID,Passcode
08:15, 953 2394 8317,091418
16:58, 953 2394 8317,091418
15:00, 807 028 8062,587838
20:02, 807 028 8062,587838
12:03, 961 8894 9557,806108
11:51, 961 8976 9546,098718
这里的第一件事是读取CSV数据,为此,我使用导入为pd的pandas
df=pd.read\u csv('meetingschedule.csv')
还增加了:
df_new=pd.DataFrame()
现在,考虑到时间列,所提到的时间应该按递增顺序(从AM到PM)排列/排序,然后与行一起放入数据框,而不写入CSV文件。在安排之后,它可能看起来像:
Time,Meeting ID,Passcode
08:15, 953 2394 8317,091418
11:51, 961 8976 9546,098718
12:03, 961 8894 9557,806108
15:00, 807 028 8062,587838
16:58, 953 2394 8317,091418
20:02, 807 028 8062,587838
现在,检查当前系统时间,如果它已经超过了第一个提到的时间并且在第二个提到的时间之前,那么为第一个提到的时间行的数据帧分配一个变量。我已经尝试过,但无法将时间间隔内容输入我的代码:
#Check the current system time
timestr = datetime.now().strftime("%H:%M")
#Check if the current time is mentioned in the Dataframe
if timestr in df.Time.values:
#Add a dataframe for that Row
df_new = df[df['Time'].astype(str).str.contains(timestr)]
请建议一种更好的方法来考虑这两个时间值,如果时间介于这两个值之间,则为该行创建一个具有时间值下限的数据帧
现在是我不知道的复杂部分。。。我需要不断迭代并检查“时间间隔”,当它超过上限值的时间时,变量(这里,df_new)必须更改并存储其行的df,直到它穿过第三个提到的时间值,依此类推,直到它到达最后一行,对于最后一行,它不应该担心下一个时间值,以避免任何“错误”
如果我启动程序的时间超过第一行中提到的时间,这也应该有效。因此,它还应该在时间列中搜索最接近但小于当前时间值的时间值
因此,它唯一的任务是随着时间从一列到下一列的推移,更改变量中的值(这里是df_new),直到它到达底部
这是因为每次我重新参加会议时,我都需要根据时间编写会议ID和密码。因此,df需要随着CSV文件中提到的时间的推移而改变。此外,我必须采用这种方法,因为我需要将其集成到我的加入计划中,以便按照CSV中的计划输入Id和密码
最后,我需要将其保持为多线程操作,因此如果可能,将其保持为线程任务,这样它就不会干扰主程序(如果它将是While循环)
非常感谢您的帮助我解决获取当前会议时间这一简单问题的方法是:
Time
列转换为TimeDelta
Time
列的数据帧的从datetime导入datetime,timedelta
作为pd进口熊猫
df=pd.DataFrame({'Time':{0:'08:15',1:'16:58',,
2: '15:00', 3: '20:02',
4: '12:03', 5: '11:51'},
'会议ID':{0:'953 2394 8317',
1: ' 953 2394 8317',
2: ' 807 028 8062',
3: ' 807 028 8062',
4: ' 961 8894 9557',
5: ' 961 8976 9546'},
'密码':{0:91418,1:91418,
2: 587838, 3: 587838,
4: 806108, 5: 98718}})
#将时间转换为时间增量
df['Time']=pd.to_timedelta(df['Time']+“:00”)
#将时间设置为索引
df=df.set_index('Time')。sort_index()
#可重复段
尝试:
#获取当前时间
current_dt=datetime.now()
#用于测试(将时间设置为12:02)(以实际代码删除)
当前值=当前值更换(小时=12,分钟=2)
#将当前小时和分钟转换为时间增量
当前增量=时间增量(小时=当前增量小时,分钟=当前增量分钟)
#获取当前时间增量之前的时间位置
会议索引=df.index.get\u loc(当前增量,方法='pad')
#使用位置访问会议行
会议行=df.iloc[[会议索引]]
除KeyError外:
#使用当天第一次会议的地点
会议行=df.iloc[[0]]
#清理显示
会议行=会议行。重置索引()
会议行['Time']=会议行['Time'].astype(str).str[-8:]
#展示
打印(会议行到字符串(索引=False))
来源(df
):
是为了测试目的而引入的。在实际场景中,应删除该选项,以免覆盖当前实际时间的小时和分钟。您的解释有点复杂,这可能是因为您不确定解决问题的最佳方法。你能说明你的预期产出是什么,而不是解释吗?请编辑您的问题,以包括已知时间的预期输出模型和数据集。感谢您的建议,但我只需要采用这种方法,因为我以前有一个程序可以使用它。希望我对给出的例子更清楚。坦率地说,我是一个初学者,你的评论真的帮助我确定了自己的身份……谢谢,这帮了我很大的忙。这种方法在以前的设置中也很好地工作,我添加了一个循环,以便随着时间的推移更改会议行。谢谢你,阿加林!!Heyy,还有一个帮助,在整理索引时,您是否可以进行编辑,以便在Except语句中,不打印此时没有会议,而是将会议行作为时间列的最小值,就像当前时间是08:10,并且在
For an Example, Taking the Current Time to be 08:30:
It is between the columns "08:15" and "11:51" as mentioned in the CSV, so
considering the Lower limit Value, It should take the row with the
"08:15" value and make a df with it:
08:15, 953 2394 8317,091418
Similarly,
When the time crosses 11:51, it should change the df_new value with the
df for the row with "11:51" value:
11:51, 961 8976 9546,098718
Time Meeting ID Passcode
08:15 953 2394 8317 91418
16:58 953 2394 8317 91418
15:00 807 028 8062 587838
20:02 807 028 8062 587838
12:03 961 8894 9557 806108
11:51 961 8976 9546 98718
Time Meeting ID Passcode
11:51:00 961 8976 9546 98718