#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
И теперь дата выглядит правильной.