@bobs32

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

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

В первом столбце написан месяц и год, потом идут значения за каждый день.
Как это можно элегантно преобразовать в datetime DataFrame, чтоб первый столбец была дата, а второй данные?
  • Вопрос задан
  • 197 просмотров
Решения вопроса 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 в котором есть то, что есть и то что нужно.
Ибо скриншот не передаёт нюансы форматирования ячеек.
Как говорят на форумах по "фотографии не лечим".
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы