Вытаскивайте данные из экселя в списки питона (чем вам там удобнее).
Получается:
data=[
['дата', '1', '2', '3', '4', '5', '6', '7', ...],
['Ноябрь 2019', '11', '22', '33', '44', '55', '66', '77', ...],
['Декабрь 2019', '11', '22', '33', '44', '55', '66', '77', ...],
...
]
Потом собираете данные в нужный формат:
import datetime
import locale
def replace_month(dt: str) -> str:
dt = dt.replace('Январь', 'января')
dt = dt.replace('Февраль', 'февраля')
# ...
return dt
locale.setlocale(locale.LC_TIME, "ru_RU.utf8")
head = data[0]
data = data[1:]
result_rows = []
for row in data:
for day, value in zip(head[1:], row[1:]):
dt = replace_month(f'{day} {row[0]}')
try:
dt = datetime.datetime.strptime(dt, '%d %B %Y')
except ValueError:
pass # тут у нас дата не сконвертнулась, например, 30 февраля. Пофиг.
else:
result_rows.append((dt, value))
Код написал в браузере, не проверял, поэтому может где-то опечатался. Не обессутьте.
Если форматы дат не постоянны, можно сделать несколько попыток преобразования по разным форматам и локалям.
Закинуть как обратно в ексель - это тоже отдельная задача.