#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 в качестве начала эпохи?
Комментариев нет:
Отправить комментарий