@bobs32

Как преобразовать строки Excel в datetime?

Есть файл Excel, структура такая:
5e591aa0647fb453450634.png

В первом столбце написан месяц и год, потом идут значения за каждый день.
Как это можно элегантно преобразовать в datetime DataFrame, чтоб первый столбец была дата, а второй данные?
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Вытаскивайте данные из экселя в списки питона (чем вам там удобнее).
Получается:
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))

Код написал в браузере, не проверял, поэтому может где-то опечатался. Не обессутьте.
Если форматы дат не постоянны, можно сделать несколько попыток преобразования по разным форматам и локалям.
Закинуть как обратно в ексель - это тоже отдельная задача.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@zloy_zaya
Хм, а выделить первый столбец, нажать Ctrl+1 и поставить тип ячеек как категория Custom и тип d-mmm пробовали?
Ответ написан
Комментировать
@nektopme
Нужен файл Excel в котором есть то, что есть и то что нужно.
Ибо скриншот не передаёт нюансы форматирования ячеек.
Как говорят на форумах по "фотографии не лечим".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы