Python循环一整天,当当前时间等于给定时间时,做些什么

2024-04-27 11:22:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Pandas数据帧df,它有三列(timefromto)。我想执行一个函数,它将执行for循环df['time']。当当前时间等于df['time']中的时间时,调用另一个函数,如print something。每行只执行一次。在实际数据中,脚本将在云中24小时执行。你知道吗

import pandas as pd
df=pd.DataFrame({'time':['08:35','09:35','09:45','10:10'],
                 'from':['SHH','SZH','WXH','ZJH'],
                 'to':['NJH','NJH','NJH','NJH']})
df

    from    time    to
0   SHH     08:35   NJH
1   SZH     09:35   NJH
2   WXH     09:45   NJH
3   ZJH     10:10   NJH

例如,当前时间为08:35时,打印Time is reached, train from SHH to NJH;当前时间为09:35时,打印Time is reached, train from SZH to NJH。我不知道如何修改下面的代码来满足我的要求 工作。我需要帮助。你知道吗

import datetime
import time

def ex(a,b):
    print("Time is reached. train from {} to {}".format(a, b))

time_ls = list(df['time'])
from_ls = list(df['from'])
to_ls = list(df['to'])

def run():
    for i in range(len(df['time'])):
        while time.strftime("%H:%M", time.localtime()) == df['time'][i]:
            time_ls.remove(df['time'][i])
            yield ex(from_ls[i],to_ls[i])

Tags: tofromimportdftimeis时间train
1条回答
网友
1楼 · 发布于 2024-04-27 11:22:44

如果要从满足特定条件的pandas.DataFrame中提取行,则需要对DataFrame进行切片,而不是手动迭代其所有行并自行检查该条件。这种方法的pandas实现比任何手动尝试都要快。你知道吗

一旦您得到了只包含与当前时间(小时和分钟)匹配的行的数据帧,您就可以迭代较小的DataFrame并打印它的每一行的结果(因为您知道它只包含那些匹配的行)。你知道吗

请参见以下示例:

from datetime import datetime as dt
import pandas as pd

if __name__ == '__main__':
    df = pd.DataFrame({
        'time': ['08:35','09:35','09:45','10:10'],
        'from': ['SHH','SZH','WXH','ZJH'],
        'to':   ['NJH','NJH','NJH','NJH']})

    ct = dt.strftime(dt.now(), '%H:%M') # Get current hours and minutes
    dn = df.loc[df['time'] == ct] # Slice DataFrame based on 'time' column

    for row in dn.iterrows():
        # Iterate over all rows that meet the condition and print it
        print('{time:s}   train from {from:s} to {to:s}.'.format(**dict(row[1])))

它产生(对于本例,如果ct字符串的小时和分钟与08:35匹配):

08:35   train from SHH to NJH.

相关问题 更多 >