Ошибка Панды при чтении даты из файла excel

#python #excel #pandas #datetime64

Вопрос:

Ошибка Pandas при чтении даты из файла Excel. Я создаю фрейм данных, используя следующую команду.

 df = pd.read_excel("report_file.xls", parse_dates=['operation_date']) df.dtypes operation_date datetime64[ns]  

Все выглядит хорошо. Но при анализе фрейма данных была обнаружена ошибка. После того, как число дня совпадает с числом месяца, панды ошибаются и переворачивают день и месяц. Например, в данных за октябрь это выглядит так.

 45 2021-10-13 11:50:34 ... 329.97 46 2021-10-13 11:41:56 ... 323.50 47 2021-10-13 11:41:55 ... 2600.00 48 2021-10-10 02:05:13 ... 1479.45 49 2021-09-10 20:22:01 ... 40.00 50 2021-09-10 19:39:39 ... 42.64 51 2021-09-10 19:39:39 ... 350.00 52 2021-06-10 20:11:48 ... 20.00 53 2021-06-10 13:34:25 ... 1.96  

Вы можете видеть, что после 2021-10-10 число дней в месте месяца.

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

1. Какой формат использует файл XLS для дат? Это похоже на проблему локализации: существуют разные способы записи дат (в США это месяц-день-год), что является одной из причин, по которой год-месяц-день был принят в качестве однозначного формата.

2. XLS использует формат день-месяц-год

Ответ №1:

Попробуйте передать формат даты явно, что-то вроде этого:

 pd.read_excel(  "report_file.xls",  parse_dates=['operation_date'],  date_parser=lambda x: pd.to_datetime(x, format='%Y-%m-%d %I:%M:%S') )  

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

1. К сожалению, у меня это не сработало. Я получил следующую информацию об ошибке. «Ошибка значения: данные о времени 29.10.2021 19:49:07 не соответствуют указанному формату». Вы выбрали правильный путь, чтобы найти решение.

Ответ №2:

Я воспользовался другим способом. В моем файле Excel ( report_file.xls ) У меня в таблице есть столбец с именем operation_date и датами с датой d-m-Y.

мой столик

Сначала я сделал фрейм данных из файла:

 df = pd.read_excel('report_file.xls') df.dtypes # operation_date object  

Затем я преобразовал дату из строки в дату-время:

 df['operation_date'] = pd.to_datetime(df['operation_date'],dayfirst=True) df.dtypes # operation_date datetime64[ns]  

В этом случае не было никаких проблем с датой после 2021-10-10, которую я описал. Вот код:

 df = pd.read_excel("report_file.xls", parse_dates=['operation_date'])  
 45 2021-10-13 11:50:34 ... 329.97 46 2021-10-13 11:41:56 ... 323.50 47 2021-10-13 11:41:55 ... 2600.00 48 2021-10-10 02:05:13 ... 1479.45 49 2021-10-09 20:22:01 ... 40.00 50 2021-10-09 19:39:39 ... 42.64 51 2021-10-09 19:39:39 ... 350.00 52 2021-10-06 20:11:48 ... 20.00 53 2021-10-06 13:34:25 ... 1.96  

И теперь дата выглядит правильной.