我正在使用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
我知道我需要从Pandas列表中的值0和1开始,但是我不知道如何循环。我是否应该考虑像...这样的字典?
{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)
感谢您的帮助!
答案 0 :(得分: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()函数,将日期列表移动一个项目以获取几个日期。