#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
, является ли это датой или целым числом.