Проще перебирать даты в daterange
:
daterange = pd.date_range(start_date, end_date)
url_template = base_url + 'KOWD/{d.year}/{d.month}/{d.day}' + end_url
for date in daterange:
url = url_template.format(d=date)
weather_list = pd.read_html(url)
# etc.
Если это работает для вас, вы можете удалить весь последующий код, который хранит даты в кадре данных, превращает их в строки и создает отдельные столбцы для года, месяца и даты.
Если вам нужно создать таблицу данных дат, вы можете сделать это:
date_list = pd.DataFrame(daterange, columns=['date'])
for k in ['year', 'month', 'day']:
date_list[k] = date_list.apply(lambda r: getattr(r.date, k), axis=1)
Затем можно выполнить итерацию и выбросить строки.
for index, row in date_list.iterrows():
url = url_template.format(d=row)
weather_list = pd.read_html(url)
# etc.
Затем подумайте, в каком формате вы хотите вывод weather_list
. Если скопированная информация не подходит для включения во фрейм данных, тогда может иметь смысл использовать словарь {date: table}
пар.
Редактировать: Например, если вы хотите выбрать 3-ю таблицу на каждой странице и объединить ее вместе с датой в одном кадре данных, вы можете сделать это:
weather_dict = {}
for date in daterange:
table = pd.read_html(url, header=0)[2]
table.set_index(table.columns.values[0], inplace=True)
table.index.set_names(None, inplace=True)
weather_dict[date] = table
weather_df = pd.concat(weather_dict)