Конвертировать список строк или строковое поле SQL в datetime
Получаю из postgresql
поле строк, в виде списка строк, которые выглядят как дата-время:
2022-12-29 01:17:59.274000
Надо получить список/массив/pd.Series из объектов datetime.datetime
.
Не было бы проблем, если бы среди этих строк не попадались бы такие:
2022-12-29 01:17:59
И когда я пытаюсь применить:
datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S.%f')
или аналогично для Pandas
:
pd.to_datetime(df.date_time, format='%Y-%m-%d %H:%M:%S.%f')
То получаю ValueError
, о том, что для .%f
не найдено значение.
Я написал костыль:
def convert_str_date(x):
return datetime.datetime.strptime(x+'.0' if '.' not in x else x, '%Y-%m-%d %H:%M:%S.%f')
list_date_time = list(map(convert_str_date, list_str)
Что-то такое же можно и для Pandas
написать и применить с .apply
.
Потом я решил, что, возможно, есть способ сразу получать из SQL
сконвертированные данные, но я нашел только to_date/to_time, которые отдельно конвертят дату и отдельно время, а как это сделать вместе - не нашел.
Итак, вопросы:
- Есть ли способ, не писать костыль, который будет добавлять '.0'. Возможно, есть какой-то прием в шаблонах datetime, типа как в регулярных выражениях.
- Есть ли способ сразу получить из SQL вот такие данные в нужном формате?
Благодарю!