【问题标题】:check if a pandas df index is having time within last 30 minutes or not(UTC time)检查 pandas df 索引是否在过去 30 分钟内有时间(UTC 时间)
【发布时间】:2021-03-23 17:55:53
【问题描述】:

我有以下格式的数据框:-

索引为DateTime索引格式,并已排序,间隔为15分钟。我想检查数据框索引是否在过去 30 分钟内具有 DateTime 索引范围。 (UTC 时间)。

示例代码:-

df = pd.DataFrame(columns = ['time','col1','col2'])# Add records to dataframe using the .loc functiondf.loc[0] = [2014,"toyota","corolla"] 
df.loc[1] = ['2021-03-10 17:15:00+00:00',"honda","civic"] 
df.loc[2] = ['2021-03-10 17:30:00+00:00',"honda","civic"] 
df.loc[3] = ['2021-03-10 17:45:00+00:00',"honda","civic"] 
df.set_index('time')
df

【问题讨论】:

    标签: python python-3.x pandas dataframe datetime


    【解决方案1】:

    在您的示例代码中,将最后一条语句设置索引修改如下:

    df['time'] = pd.to_datetime(df['time'])
    df = df.set_index('time')
    

    然后,要检查 DateTime 索引范围是否在 UTC 时间从现在起 30 分钟内,您可以使用:

    ((pd.Timestamp.now(tz='UTC') - df.index[-1]) / pd.Timedelta('1 minute')) < 30 
    
    Output:
     
    False
    

    【讨论】:

      【解决方案2】:

      确保本地化到您的时区

      idx_max = df.index.max().tz_localize('America/Los_Angeles').tz_convert('UTC')
      utc_30 = pd.Timestamp.utcnow() - pd.offsets.Minute(30)
      
      idx_max > utc_30
      

      如果您的索引已经有一个时区,那么您可以跳过tz_localize

      idx_max = df.index.max().tz_convert('UTC')
      utc_30 = pd.Timestamp.utcnow() - pd.offsets.Minute(30)
      
      idx_max > utc_30
      

      您可以使用

      获取可能的时区列表
      import pytz
      
      pytz.country_timezones('US')
      

      无论你在哪个国家。

      【讨论】:

      • 为什么 OP 本地化然后 tz_convert?输入已经具有指定为 00:00 的 UTC 偏移量,它被解析为 UTC
      • 是的。我没有马上意识到这一点。这就是为什么我更新了我的答案以显示如果它已经有一个时区该怎么办。
      猜你喜欢
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 2017-11-12
      • 2017-08-27
      • 1970-01-01
      相关资源
      最近更新 更多