2015-11-11 4 views
2

У меня есть дату в этом формате - '17 -JUL-53'Панды dataframe to_datetime() преобразовывает дату неправильно

когда я pd.to_datetime('17-JUL-53') возвращает Timestamp('2053-07-17 00:00:00')

Можно сказать, что это правильно, но фактическая дата для возврата - 1953-07-17. Это отлично работает в excel, как мы это делаем с to_datetime()?

[править] Просто, чтобы показать, что происходит, когда мы преобразуем из Обл времени в питоне:

>>> time.strptime('17-JUL-53', '%d-%b-%y') 
time.struct_time(tm_year=2053, tm_mon=7, tm_mday=17, tm_hour=0, tm_min=0,tm_sec=0, tm_wday=3, tm_yday=198, tm_isdst=-1) 

ответ

1

Я думаю, что вам нужно добавить подстроку 19 в год.
Дополнительная информация о форматировании даты и времени here.

import pandas as pd 

s = '17-JUL-53' 
d = s[:7] + '19' + s[7:] 
print d 
#17-JUL-1953 
dt = pd.to_datetime(d, format='%d-%b-%Y') 
print dt 
#1953-07-17 00:00:00 

%d-%b-%Y означает:

% d - День месяца как дополненные нули десятичного число
% б - Месяц как сокращенное название локало
% Y - Год со столетием как десятичное число

+0

спасибо, человек. Думаю, я должен это сделать. – Max

1

Я хотел бы сделать это таким образом, обеспечивая все ваши даты в 1900 веке :)

from dateutil.relativedelta import relativedelta 
input ='17-jul-53' 
output = pd.to_datetime(input) 
output_clean = output - relativedelta(years=100) 
+0

Спасибо человек. К сожалению, это на протяжении двух столетий: (( – Max

+0

, тогда у вас возникла проблема с вашими базовыми данными, я бы сказал: как вы различаете '17 -jul-53 ', 1953 или 1853 или 2053? – euri10

+0

да действительно. Данные клиента не могут но я действительно благодарен за упоминание этого пакета – Max

1

Как-то вам нужно указать в каком столетии вы ... в pandas это не может быть обработан to_datetime функцией, поэтому вам нужно сделать это вверх по течению. Ниже приведен подход с регулярным выражением:

import re 
import pandas as pd 

date = '17-JUL-53' 

pd.to_datetime(re.sub(r'(\d{2}-\w{3}-)(\d{2})', r'\g<1>19\2', date)) 
#Timestamp('1953-07-17 00:00:00') 
+0

Спасибо за ваше замечательное регулярное решение! – Max

+0

не беспокоится, это интересно, потому что есть трюк, чтобы использовать группы, за которыми следуют цифры, ака 'r '\ 119 \ 2'' не работает! –

Смежные вопросы