Я использую Pandas для создания списка дат и времени в пределах указанного диапазона, чтобы получить запрос API. Моя цель - запрашивать недели или месяцы в час.
time_range = pd.date_range('20180601T07:00:0000', '20180701T07:00:0000', freq='H')
time_range = time_range.strftime("%Y%m%d"+'T%H:00-0000')
выводит список раз в желаемом формате списка. Где я сталкиваюсь с трудностями, так это то, что URL-адрес отформатирован...
startdatetime=20180601T07:00-0000&enddatetime=20180601T08:00-0000
Я понимаю, что мне нужно начинать с значений 0 и 1 из списка Pandas, но я не знаю, как это сделать. Должен ли я думать о словаре, как...
{date1:[hour1, hour2, etc...], date2:[hour1, hour2, etc...], ...}
и используйте.format где startdatetime = {1} & enddatetime = {2}? или если он больше похож на цикл for...
for date in date_range:
url = 'http://somename?startdatetime={date}&enddatetime{date2}'
urldate = url.format(date=date)
urldate2 = url.format(date2=date + 1)
Любая помощь приветствуется!
Если я четко понимаю, вы хотите выполнить итерацию с начальной даты/времени (2018-06-01 07:00) до конечной даты/времени (2018-07-01 07:00) с шагом в один час. И создайте URL-адрес с интервалом даты/времени в течение одного часа.
Я не знаю, почему вы используете Panda для этого, когда можете сделать это со стандартной библиотекой, например:
import datetime
start = datetime.datetime(2018, 6, 1, 7)
end = datetime.datetime(2018, 7, 1, 7)
delta = datetime.timedelta(hours=1)
fmt = 'http://somename?startdatetime={date1:%Y%m%d%H:00-0000}&enddatetime{date2:%Y%m%d%H:00-0000}'
while start < end:
date1 = start
date2 = start + delta
url = fmt.format(date1=date1, date2=date2)
print(url)
start = date2
Ты получаешь:
http://somename?startdatetime=2018060107:00-0000&enddatetime2018060108:00-0000
http://somename?startdatetime=2018060108:00-0000&enddatetime2018060109:00-0000
http://somename?startdatetime=2018060109:00-0000&enddatetime2018060110:00-0000
http://somename?startdatetime=2018060110:00-0000&enddatetime2018060111:00-0000
...
В цикле я работаю с экземплярами даты. Я использую строку формата, например "{date2:% Y% m% d% H: 00-0000}", чтобы форматировать дату и время в требуемом формате.
Обратите внимание, что функцию date_range() легко реализовать со стандартной библиотекой:
def date_range(start, end, delta):
while start < end:
yield start
start = start + delta
Чтобы получить список дат с интервалом в один час, вы можете:
dates = list(date_range(
datetime.datetime(2018, 6, 1, 7),
datetime.datetime(2018, 7, 1, 7),
datetime.timedelta(hours=1)))
Тогда решение становится:
fmt = 'http://somename?startdatetime={date1:%Y%m%d%H:00-0000}&enddatetime{date2:%Y%m%d%H:00-0000}'
for date1, date2 in zip(dates[:-1], dates[1:]):
url = fmt.format(date1=date1, date2=date2)
print(url)
Хитрость заключается в использовании функции zip() со списком дат, сдвинутых с одним элементом, чтобы получить пары дат.