2017-10-02 3 views
0

最初の3時間を要約し、次の3つを要約する日付のリストを作成したいと思います。何かのように: ['2016/05/01-00-02h', '2016/05/01-03-05h', '2016/05/01-06-08h',.....'2016/05/31-21-23h']。今までは、要約のない日付のリストしかありませんでした。要約時間のある日付のリスト

from datetime import datetime as dt, timedelta 

deb = '20160501' 
fin = '20160531' 

start = dt.strptime(deb, "%Y%m%d") 
end = dt.strptime(fin, "%Y%m%d") + timedelta(days=1) 

def hour_range(start, end): 
    while start < end: 
     yield start 
     start += timedelta(hours=1) 

date_list = [h.strftime('%Y/%m/%d %H') for h in hour_range(start, end)] 
+0

このようなシーケンスは「31-21-23h」にすることはできません'31-22-24h'または' 31-22-00h' – RomanPerekhrest

+0

なぜですか? 31日は5月の最終日とし、時間は21-23hです。 00:00は「2016/06/01 00-02h」のように翌日になるはずです。 – Hannah

答えて

0

私はあなたがpandasを使用して必要なものを達成することができると思う:

import pandas as pd 

dates = pd.date_range('2016-05-01', '2016-06-01', freq='2h') 

result = pd.IntervalIndex.from_breaks(dates, closed='left').tolist() 
#[Interval('2016-05-01', '2016-05-01 02:00:00', closed='left'), 
#Interval('2016-05-01 02:00:00', '2016-05-01 04:00:00', closed='left'), 
#Interval('2016-05-01 04:00:00', '2016-05-01 06:00:00', closed='left') 
#... 
#'2016-05-31 20:00:00', closed='left'), 
#Interval('2016-05-31 20:00:00', '2016-05-31 22:00:00', closed='left'), 
#Interval('2016-05-31 22:00:00', '2016-06-01', closed='left')] 
+0

あなたの答えをありがとうが、残念ながら、それは本当に私が望むものではありません。私は私のプロットで私のx軸のリストを使用したい。だから、私は日付と上記の方法で00:00 - 02:00hの範囲が必要です。そしてその範囲は03:00〜05:00h、次に06:00〜08:00h ....... – Hannah

0

は、算術として扱います。開始時間を午前2時に設定してから、希望の時間点をすべて作成するまで、それをtimedelta(hours=3)だけ増分します。 (間隔を指定すると、次の日にロールオーバーする前に8つの時点があります)。たとえば、次のようにします。

start += timedelta(hours=2) # Advance to 2am 
while start < end: 
    yield start 
    start += timedelta(hours=3) 
関連する問題