У меня есть файл Excel со многими столбцами, один из них, «Столбец3» - это дата с некоторым текстом в нем, в основном это выглядит так:
26/05/20
XXX
YYY
12/05/2020
Данные записываются в DD / MM Формат / YY, но pandas, как и в excel, считает, что 05.12.2020 это 05 декабря c 2020, а это 12 мая 2020 года. (Мой windows установлен в американский формат даты)
Важное примечание: когда я открываю стандартный файл excel, ячейки с 12/05/2020 уже имеют тип даты, пытаясь преобразовать его в текст, он дает мне 44170, который даст мне неправильную дату, если я просто переформатирую его в DD / MM / YY
Я добавил эту строку кода:
iport pandas as pd
dateparse = lambda x: pd.datetime.strptime(x,'%d/%m/%y')
df = pd.read_excel("my_file.xlsx", parse_dates=['Column3'], date_parser=dateparse)
Но текст в столбце генерирует ошибку.
ValueError: time data 'XXX' does not match format '%d/%m/%y'
Я пошел дальше и вручную удалил все текст (очевидно, я не могу делать это все время), чтобы узнать, работает ли он или нет, но затем я получил следующую ошибку
dateparse = lambda x: pd.datetime.strptime(x,'%d/%m/%y')
TypeError: strptime() argument 1 must be str, not datetime.datetime
Я также пробовал это:
df['Column3'] = pd.to_datetime(df.Column3, format ='%d/%m/%y', errors="coerce")
# if I make errors="ignore" it doesn't change anything.
в этом случае мой 26/05/20 был правильно преобразован в 26 мая 2020 года, но я потерял все свои текстовые данные (это нормально) и другие даты, которые ch не соответствует моему аргументу формата. Потому что раньше они считались датами американского типа.
Моя цель - преобразовать данные в столбце 3 в тот же формат, чтобы я мог применять фильтры с pandas. Я думаю, что это пара решений:
- сказать Pandas, чтобы вообще не преобразовывать текст в дату (но он уже сохранен как тип даты в стандартном файле, это будет работать?)
- как-то игнорировать текстовые значения и использовать метод date_parser = co convert добавить даты в DD / MM / YY
- с помощью pd.to_datetime convert 26/05/20 to 26 May 2020, а затем конвертировать 2020-09-06 С 00:00:00 до 9 июня 2020 г. (кажется, самый простой, но аргумент игнорировать не работает.)
Вот ссылка на небольшой образец файла https://easyupload.io/ca5p6w