Как преобразовать столбец панд в datetime - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть фрейм данных df

df
    date   
0  05/01/2017
1  04/01/2017
2  08/01/2017
3  03/01/2017
4  10/01/2017

Я хочу преобразовать столбец date из str в datetime

Я делаю следующее

df['date'] = pd.to_datetime(df['date'])

но это занимает бесконечное время, и если я пытаюсь

pd.to_datetime(df['date'][0])

, я получаю следующую ошибку

year is out of range

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Попробуйте этот код:

df['date'] = pd.to_datetime(df['date'],infer_datetime_format=True)

Из официальных документов pandas, Передача infer_datetime_format = True может часто ускорять синтаксический анализ, если точно не в формате ISO8601, но в обычном формате как тот, который вы проходите

0 голосов
/ 12 сентября 2018

Укажите format или infer_datetime_format, чтобы увидеть значительное повышение производительности:

df = pd.concat([df]*10000)

%timeit pd.to_datetime(df['date'])                              # 12.5 s per loop
%timeit pd.to_datetime(df['date'], format='%m/%d/%Y')           # 252 ms per loop
%timeit pd.to_datetime(df['date'], infer_datetime_format=True)  # 228 ms per loop

Предварительное сообщение Pandas о том, что вы ожидаете, обычно является хорошим способом повышения производительности.Так что эта идея будет работать и с pd.read_csv, если вы читаете из входного файла.

Вероятно, ваша ошибка связана с плохими данными.Если вы хотите вернуть NaT для неконвертируемых значений, укажите errors='coerce':

pd.to_datetime(df['date'], format='%m/%d/%Y', errors='coerce')
...