Как преобразовать число в дату в pandas?

У меня есть excel файл со столбцом даты в виде общего формата

общий формат

Как я могу изменить столбец в pandas из общего формата в формат даты как это делает эксель? Pandas воспринимает его как число

введите сюда описание изображения

Столбец, который я хочу получить

формат даты

Я знаю, что возможно проще изменить это в экселе, а потом читать файл, но я бы хотела автоматизировать эту работу, так как данные приходят каждый день в таком формате


Ответы (2 шт):

Автор решения: strawdog

Excel хранит дату и время в виде вещественного числа. Целая часть этого числа - количество дней с полуночи 1 января 1900. Дробная - время.

можно сделать так:

import pandas as pd

df = pd.DataFrame([40557, 44664, 55603])

df:

       0
0  44655
1  44664
2  55603

дальше преобразовываем:

df["date"] = (pd.to_datetime("1900-01-01")+pd.to_timedelta(df[0], unit="D"))

UPDATE:

как выяснилось, excel получил по наследству баг, из-за чего вычисления разницы дат в Excel и python/pandas отличаются на 2 дня. поэтому правильно вычислять будет так:

df["date"] = (pd.to_datetime("1899-12-30 00:00:00", yearfirst=True)+pd.to_timedelta(df[0], unit="D"))

теперь df:

       0       date
0  40557 2011-01-14
1  44664 2022-04-13
2  55603 2052-03-25

вы получаете дату типа datetime

→ Ссылка
Автор решения: SergFSM

еще как вариант (пример данных позаимствовал из ответа @strawdog, спасибо ему):

df['date'] = pd.to_datetime(df[0]-25567, unit='D')  # 25567 - разница между Excel и unix (1900-01-01 и 1970-01-01)

>>> df
'''
       0       date
0  40557 2011-01-16
1  44664 2022-04-15
2  55603 2052-03-27
→ Ссылка