Как мне безопасно преобразовать столбцы Pandas в datetime (если они могут быть другого dtype)?

#python #pandas

#python #pandas

Вопрос:

Когда pandas загружает данные, например, из csv, он запускается infer_objects() (или что-то, что делает то же самое). infer_objects пытается определить подходящий dtype для каждого загруженного столбца. Иногда (всегда?) Не выводит столбцы datetime.

Для выполнения динамического анализа по потоку мне нужно, чтобы dtypes назначались автоматически. Я хочу динамически преобразовывать столбцы объектов в datetimes. Мне действительно нравится использовать infer_datetime_format=True within pd.to_datetime() . Это здорово, потому что я не всегда знаю формат, в котором будет отображаться дата. Но это не будет работать в долгосрочной перспективе, потому что это слишком эффективно.

Он не будет выдавать никаких ошибок в столбцах int или float (потому что технически это могут быть даты). В качестве альтернативы, если я только попытаюсь преобразовать столбцы с dtype ‘object’, я могу получить его с ошибкой. errors = 'raise' Но для многих столбцов datetime, с которыми я имею дело, я предпочитаю принудительно использовать ошибки форматирования ( errors = 'coerce' ), а не предотвращать преобразование столбца.

Итак, кто-нибудь нашел хороший способ наилучшим образом определять столбцы, которые являются реалистичными датами?

Ответ №1:

Вы можете попробовать передать настроенный date_parser :

 pd.read_csv('file.csv', parse_dates=[0,1,2,3],
            date_parser=lambda x: pd.to_datetime(x, errors='coerce'))
 

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

1. Можете ли вы предоставить пример функции date_parser, которая будет работать (даже использование psudo-кода помогло бы); Я вижу предоставленную вами лямбду, но я не думаю, что это сработает. И как я мог бы указать ему проверять каждый столбец с помощью parse_dates. Я не буду знать, сколько будет столбцов.

2. Я не знаю ничего, что могло бы автоматически анализировать даты для вас. Как правило, вы не можете определить 20201216 , является ли это датой или целым числом.