Панды, неправильный формат даты и времени - PullRequest
0 голосов
/ 03 ноября 2018

У меня есть df, содержит дату 2999-01-01, которая не соответствует указанному формату.

    a date
prod1 2019/02/23
prod2 2999/01/02

когда я использую:

df.date=pd.to_datetime(df.date_DATE,format='%Y-%m-%d')

возвращает ошибку: данные времени '2999-01-01 00: 00: 00.0' не соответствуют указанному формату

Как исправить? Спасибо

Ответы [ 3 ]

0 голосов
/ 03 ноября 2018

Так как pd.Timestamp представлен в виде длинных наносекунд , максимальное представляемое значение Timestamp составляет 2262 (в частности, pd.Timestamp.max), поэтому то, что вы делаете, никогда не сработает.

Если вы не возражаете представлять свое время в течение дня pd.Period, вы можете использовать его вместо этого. Например:

In [12]: df
Out[12]:
       a        date
0  prod1  2019/02/23
1  prod2  2999/01/02

In [13]: df.date.apply(pd.Period)
Out[13]:
0   2019-02-23
1   2999-01-02
Name: date, dtype: object

In [23]: df.date.apply(pd.Period)[1]
Out[23]: Period('2999-01-02', 'D')
0 голосов
/ 04 ноября 2018

Просто что-то пришло мне в голову:

import datetime    
df.Date.apply(lambda x:datetime.datetime.strftime(x,'%Y-%m-%d'))
0 голосов
/ 03 ноября 2018

Используйте параметр errors='coerce' для преобразования даты за пределами limits в NaT, также изменен формат на %Y/%m/%d, поскольку разделитель равен /:

df['date'] = pd.to_datetime(df['date'],format='%Y/%m/%d', errors='coerce')
print (df)
       a       date
0  prod1 2019-02-23
1  prod2        NaT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...