繁体   English   中英

使用 Pandas Datetime Python 检查分钟间隔

[英]Checking minute intervals using Pandas Datetime Python

我想编写一段代码来检查给定的日期值是否是每月的第一分钟,例如xx-01T00:00:00Z 我想实现下面给出的布尔 function。 我将如何修改下面的代码以便能够做到这一点?

import datetime
import pandas as pd 
import numpy 

def dates(date_vals):
    datetime = pd.to_datetime(date_vals)
    
    for x in date_vals:
        #Condition that l;ooss for if it is the first day and the minute of the month 
        #Is the dates format x-x-01T00:00:00Z
        
dates(np.array(['2015-10-08T13:40:00Z', '2016-01-04T21:00:00Z', '2015-10-01T00:00:00Z', '2015-10-08T00:00:00Z']))

预期 Output:

False
False
True
False

只需设置一个 boolean 掩码:

dates = pd.to_datetime(['2015-10-08T13:40:00Z', '2016-01-04T21:00:00Z', '2015-10-01T00:00:00Z', '2015-10-08T00:00:00Z'])

mask = (dates.day == 1) & (dates.hour == 0) & (dates.minute == 0)

一个更简单的掩码是使用strftime方法仅过滤日、小时和分钟,并查找第一天、0 小时、0 分钟的日期时间:

mask = dates.strftime('%d %H:%M') == '01 00:00'

Output:

array([False, False,  True, False])

这应该有效:

import datetime
import pandas as pd
import numpy as np
example = np.array(['2015-10-08T13:40:00Z', '2016-01-04T21:00:00Z', '2015-10-01T00:00:00Z', '2015-10-08T00:00:00Z'])
def my_dates_fun(date_vals):
    datetime_conversion = pd.to_datetime(date_vals)
    return (datetime_conversion.day == 1) & (datetime_conversion.hour == 0) & (datetime_conversion.minute == 0)
print(my_dates_fun(example))

Output:

[False False  True False]

最好的方法是在每月的第一天和第一分钟到第二分钟创建一个熊猫间隔。 然后检查日期是否在间隔内

您可以使用https://pandas.pydata.org/docs/reference/api/pandas.Interval.html来实现

并使用.month / 创建新的熊猫日期时间。 从传入参数的日期时间开始的年份。

另一种方法是“确定”日期:

dti = pd.to_datetime(np.array(['2015-10-08T13:40:00Z', '2016-01-04T21:00:00Z', 
                               '2015-10-01T00:00:00Z', '2015-10-08T00:00:00Z']))

out = dti.tz_localize(None).to_period('M').to_timestamp() == dti.tz_localize(None)
print(out)

# Output
array([False, False,  True, False])

我假设您想要False如果时间戳具有非零秒/毫秒/... 组件,例如'2015-10-01T00:00:01Z' -> False

>>> dates = pd.to_datetime(['2015-10-08T13:40:00Z', '2016-01-04T21:00:00Z', '2015-10-01T00:00:00Z', '2015-10-08T00:00:00Z', '2015-10-01T00:00:01Z'])
>>> dates.to_period('M').to_timestamp() == dates.tz_localize(None)
array([False, False,  True, False, False])

否则,使用

>>> dates.to_period('M').to_timestamp() == dates.floor('min').tz_localize(None)
array([False, False,  True, False,  True]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM