检查时间值是否介于Python中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数

这个问题可能看起来很难理解,但我会尽量让它简单。我得到了一个包含以下数据的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数据,为此,我使用导入为pdpandas

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
    列的数据帧的
  • 然后使用“pad”方法获得给定时间之前最接近匹配的索引
  • 使用该索引从数据帧获取行
  • 最后,清除输出的显示
  • 从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