我正在嘗試生成一個開始日期串列,我將用它來抓取谷歌趨勢。我需要相隔 3 小時的開始日期,然后我將根據開始日期以 4 小時為增量生成結束日期,因此結束日期與下一個開始日期重疊 1 小時。
from datetime import datetime, timedelta, date
import pandas as pd
import time
start='2018-06-05T01'
end='2020-11-01T23'
start_date = datetime.strptime(start, '%Y-%m-%dT%H')
end_date = datetime.strptime(end, '%Y-%m-%dT%H')
delta = timedelta(hours=3)
while True:
date_list = []
date_list.append(start_date delta)
if start_date >= end:
break
這似乎不起作用,我不確定如何修復它,因為我不確定如何在結束日期到達之前保持回圈。
uj5u.com熱心網友回復:
由于您pandas無論如何都在使用,請嘗試使用date_range:
start_date = pd.to_datetime(start, format='%Y-%m-%dT%H')
end_date = pd.to_datetime(end, format='%Y-%m-%dT%H')
date_list = pd.date_range(start_date, end_date, freq="3H")
>>> date_list
DatetimeIndex(['2018-06-05 01:00:00', '2018-06-05 04:00:00',
'2018-06-05 07:00:00', '2018-06-05 10:00:00',
'2018-06-05 13:00:00', '2018-06-05 16:00:00',
'2018-06-05 19:00:00', '2018-06-05 22:00:00',
'2018-06-06 01:00:00', '2018-06-06 04:00:00',
...
'2020-10-31 19:00:00', '2020-10-31 22:00:00',
'2020-11-01 01:00:00', '2020-11-01 04:00:00',
'2020-11-01 07:00:00', '2020-11-01 10:00:00',
'2020-11-01 13:00:00', '2020-11-01 16:00:00',
'2020-11-01 19:00:00', '2020-11-01 22:00:00'],
dtype='datetime64[ns]', length=7048, freq='3H')
如果您不希望這是一個 DatetimeIndex,您可以使用:
date_list = pd.date_range(start_date, end_date, freq="3H").tolist()
uj5u.com熱心網友回復:
您的代碼將一個空串列分配給date_list并且start_date在每次迭代中都不會更改。該end變數是一個字串,而不是像一個日期時間end_date。
uj5u.com熱心網友回復:
正如 user5401398 指出的那樣,你應該
- 移到
date_list回圈外 start_date在回圈中更新- 與
end_date代替end變數比較,它是一個字串。
修改后的版本在下面。
from datetime import datetime, timedelta, date
start='2018-06-05T01'
end='2020-11-01T23'
start_date = datetime.strptime(start, '%Y-%m-%dT%H')
end_date = datetime.strptime(end, '%Y-%m-%dT%H')
delta = timedelta(hours=3)
date_list = [start_date]
while True:
start_date = delta
date_list.append(start_date)
if start_date >= end_date:
break
print(date_list)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/350196.html
