Как преобразовать число в дату в pandas?
У меня есть excel файл со столбцом даты в виде общего формата
Как я могу изменить столбец в pandas из общего формата в формат даты как это делает эксель? Pandas воспринимает его как число
Столбец, который я хочу получить
Я знаю, что возможно проще изменить это в экселе, а потом читать файл, но я бы хотела автоматизировать эту работу, так как данные приходят каждый день в таком формате
Ответы (2 шт):
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
еще как вариант (пример данных позаимствовал из ответа @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


