Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查python中是否有新的一天?_Python_Pandas_List_Datetime - Fatal编程技术网

如何检查python中是否有新的一天?

如何检查python中是否有新的一天?,python,pandas,list,datetime,Python,Pandas,List,Datetime,我有一个使用函数date_range of pandas创建的日期列表。在该列表中,日期为2019年1月1日00:00:00至2019年12月31日00:00:00。现在每个时间间隔有15分钟的间隔,因此一天内总共有96个15分钟的区块24*60/15。因此,列表如下所示: modelStartDate = "01/01/2019" modelEndDate = "31/12/2019" interval = 15 dateTime = pd.date_range(start=modelStar

我有一个使用函数date_range of pandas创建的日期列表。在该列表中,日期为2019年1月1日00:00:00至2019年12月31日00:00:00。现在每个时间间隔有15分钟的间隔,因此一天内总共有96个15分钟的区块24*60/15。因此,列表如下所示:

modelStartDate = "01/01/2019"
modelEndDate = "31/12/2019"
interval = 15
dateTime = pd.date_range(start=modelStartDate, end=modelEndDate, freq=str(interval) + 'min')

print(dateTime)
输出:

DatetimeIndex(['2019-01-01 00:00:00', '2019-01-01 00:15:00',
               '2019-01-01 00:30:00', '2019-01-01 00:45:00',
               '2019-01-01 01:00:00', '2019-01-01 01:15:00',
               '2019-01-01 01:30:00', '2019-01-01 01:45:00',
               '2019-01-01 02:00:00', '2019-01-01 02:15:00',
               ...
               '2019-12-30 21:45:00', '2019-12-30 22:00:00',
               '2019-12-30 22:15:00', '2019-12-30 22:30:00',
               '2019-12-30 22:45:00', '2019-12-30 23:00:00',
               '2019-12-30 23:15:00', '2019-12-30 23:30:00',
               '2019-12-30 23:45:00', '2019-12-31 00:00:00'],
              dtype='datetime64[ns]', length=34945, freq='15T')
所以我在做一些需要一些计数器的计算,我想做的是在每一天重新设置计数器。所以做这个任务我有两种方法:第一,我可以简单地把列表分成96个块,然后在每96个块之后重置计数器;第二,我想浏览这个列表,看看什么时候是新的一天,只有当发现有新的一天时才重置计数器。 第一种方法:

modelStartDate = "01/01/2019"
modelEndDate = "31/12/2019"
interval = 15
dateTime = pd.date_range(start=modelStartDate, end=modelEndDate, freq=str(interval) + 'min')

for i in range(len(dateTime)):
    if i % 96 == 0:
        print("new date at ", i)
第二种方法: 我不知道该怎么做。有人能帮忙吗。在所需的输出中,我不需要任何特别的东西,只需简单地告诉您这是新的一天中的新日期。因此,在每个第96个块之后,输出将如下所示:

new date: 02/01/2019 00:00:00
new date: 03/ 01/2019 00:00:00
and so on
您可以使用DatetimeIndex的dayofyear方法。每当它改变,你就有了新的一天。例:

import pandas as pd

modelStartDate, modelEndDate = "01/01/2019", "31/12/2019"
interval = 15
dateTime = pd.date_range(start=modelStartDate, end=modelEndDate, freq=str(interval) + 'min')

doy = pd.Series(dateTime.dayofyear)
m = doy.ne(doy.shift())

dateTime[m]
# DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
#                '2019-01-05', '2019-01-06', '2019-01-07', '2019-01-08',
#                '2019-01-09', '2019-01-10',
#                ...
#                '2019-12-22', '2019-12-23', '2019-12-24', '2019-12-25',
#                '2019-12-26', '2019-12-27', '2019-12-28', '2019-12-29',
#                '2019-12-30', '2019-12-31'],
#               dtype='datetime64[ns]', length=365, freq=None)
要获得您描述的“计数器”,您可以利用、稍微修改它并使用

v = (~m).astype(int)
cumsum = v.cumsum()
reset = -cumsum[v == 0].diff().fillna(cumsum)
counting = v.where(v != 0, reset).cumsum()
# counting
# 0         0
# 1         1
# 2         2
# 3         3
# 4         4
#          ..
# 34940    92
# 34941    93
# 34942    94
# 34943    95
# 34944     0
# Length: 34945, dtype: int64
您可以使用DatetimeIndex的dayofyear方法。每当它改变,你就有了新的一天。例:

import pandas as pd

modelStartDate, modelEndDate = "01/01/2019", "31/12/2019"
interval = 15
dateTime = pd.date_range(start=modelStartDate, end=modelEndDate, freq=str(interval) + 'min')

doy = pd.Series(dateTime.dayofyear)
m = doy.ne(doy.shift())

dateTime[m]
# DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
#                '2019-01-05', '2019-01-06', '2019-01-07', '2019-01-08',
#                '2019-01-09', '2019-01-10',
#                ...
#                '2019-12-22', '2019-12-23', '2019-12-24', '2019-12-25',
#                '2019-12-26', '2019-12-27', '2019-12-28', '2019-12-29',
#                '2019-12-30', '2019-12-31'],
#               dtype='datetime64[ns]', length=365, freq=None)
要获得您描述的“计数器”,您可以利用、稍微修改它并使用

v = (~m).astype(int)
cumsum = v.cumsum()
reset = -cumsum[v == 0].diff().fillna(cumsum)
counting = v.where(v != 0, reset).cumsum()
# counting
# 0         0
# 1         1
# 2         2
# 3         3
# 4         4
#          ..
# 34940    92
# 34941    93
# 34942    94
# 34943    95
# 34944     0
# Length: 34945, dtype: int64
您可以使用Timestamp.round函数将datetime值与其舍入的对应值进行比较,如果为真,计数器将重置

modelStartDate = "01/01/2019"
modelEndDate = "31/12/2019"
interval = 15
dateTime = pd.date_range(start=modelStartDate, end=modelEndDate, freq=str(interval) + 'min')

counter = 0
for i in dateTime:
    # Do your calculations
    counter+=1  # Counter value incrementing

    if i == i.round(freq='D'):  # Check if its the start of the day
        counter = 0  # Reset the counter
        print("New Date at {}".format(i))
您可以使用Timestamp.round函数将datetime值与其舍入的对应值进行比较,如果为真,计数器将重置

modelStartDate = "01/01/2019"
modelEndDate = "31/12/2019"
interval = 15
dateTime = pd.date_range(start=modelStartDate, end=modelEndDate, freq=str(interval) + 'min')

counter = 0
for i in dateTime:
    # Do your calculations
    counter+=1  # Counter value incrementing

    if i == i.round(freq='D'):  # Check if its the start of the day
        counter = 0  # Reset the counter
        print("New Date at {}".format(i))

这对我来说很有用,但也许不是这样:

型号起始日期=2019年1月1日 modelEndDate=2019年12月31日 间隔=15 dateTime=pd.date\u rangestart=modelStartDate,end=modelEndDate dateTime\u min=pd.date\u rangestart=modelStartDate,end=modelsenddate,freq=strinterval+'min' df_combined=pd.DataFrame{date_frequency:dateTime_min} df_final=pd.DataFrame 对于日期时间中的日期: df_final=df_final.appenddf_combined[df_combined['date_frequency'].dt.strftime'%d/%m/%Y'==date.strftime'%d/%m/%Y']。重置索引 显示DF_最终版本 输出:

    index   date_frequency
0     0     2019-01-01 00:00:00
1     1     2019-01-01 00:15:00
2     2     2019-01-01 00:30:00
3     3     2019-01-01 00:45:00
4     4     2019-01-01 01:00:00
...     ...     ...
91  187     2019-01-02 22:45:00
92  188     2019-01-02 23:00:00
93  189     2019-01-02 23:15:00
94  190     2019-01-02 23:30:00
95  191     2019-01-02 23:45:00

这对我来说很有用,但也许不是这样:

型号起始日期=2019年1月1日 modelEndDate=2019年12月31日 间隔=15 dateTime=pd.date\u rangestart=modelStartDate,end=modelEndDate dateTime\u min=pd.date\u rangestart=modelStartDate,end=modelsenddate,freq=strinterval+'min' df_combined=pd.DataFrame{date_frequency:dateTime_min} df_final=pd.DataFrame 对于日期时间中的日期: df_final=df_final.appenddf_combined[df_combined['date_frequency'].dt.strftime'%d/%m/%Y'==date.strftime'%d/%m/%Y']。重置索引 显示DF_最终版本 输出:

    index   date_frequency
0     0     2019-01-01 00:00:00
1     1     2019-01-01 00:15:00
2     2     2019-01-01 00:30:00
3     3     2019-01-01 00:45:00
4     4     2019-01-01 01:00:00
...     ...     ...
91  187     2019-01-02 22:45:00
92  188     2019-01-02 23:00:00
93  189     2019-01-02 23:15:00
94  190     2019-01-02 23:30:00
95  191     2019-01-02 23:45:00

很好的解决方案。你能添加代码,如何用数据帧实现这个吗?很好的解决方案。您可以添加代码来实现这个数据帧吗?