Страницы

Поиск по вопросам

четверг, 9 января 2020 г.

Преобразовать разные форматы дат в одном Excel столбце в datetime

#python #excel #pandas #dataframe #datetime


Уважаемые друзья. У меня есть очень "сложная" задача. Я не знаю как ее решить.

Есть в Excel столбец с датами. Все ячейки столбца разные: Дата, Число, Текст и т.д.
Каждую ячейку заполняли разные люди. В столбце где-то около 300 тысяч ячеек (строк).

Я загружаю этот файл в Jupyter, с помощью Pandas: 

pd.read_excel('Test.xlsx',header=0,dtype = str)


Задача, с которой не могу справиться: как преобразовать каждую строку в один тип
данных Дата? А если преобразовать не удалось, то оставить строкой. 

Если более точно:

Например, в Excel ячейка имеет числовое значение 43123 преобразовать в Дату, то это
будет 23.01.2018.

Как в Python выполнить именно такой преобразование?

Всем, кто ответит буду благодарен до глубины души!!!
    


Ответы

Ответ 1



Попробуйте так: import datetime as dt import pandas as pd def get_excel_date(col): res = pd.to_datetime(col, errors='coerce') mask = res.isna() res.loc[mask] = pd.to_timedelta(col[mask].astype('float'), unit='d') + dt.datetime(1899, 12, 30) return res In [20]: s = pd.Series(['2018-10-31 23:44:59.996000', '43123', '43511.65625', '13.01.2010T12:12:12', '2019/07/10 23:59:59.123456']) In [21]: get_excel_date(s) Out[21]: 0 2018-10-31 23:44:59.996000 1 2018-01-23 00:00:00.000000 2 2019-02-15 15:45:00.000000 3 2010-01-13 12:12:12.000000 4 2019-07-10 23:59:59.123456 dtype: datetime64[ns] PS почему разработчики Excel использовали 30.12.1899 в качестве начала эпохи?

Комментариев нет:

Отправить комментарий