2016-07-29 6 views
0

У меня есть dataframe, который выглядит следующим образом:Странные результаты timedelta с пандами

df = pd.DataFrame({'date_sent': ['06/11/2015', '', 'Not required', '06/11/2015'], 
        'date_published': ['06/11/2015', '', '', '23/01/2016']}) 

Я хочу, чтобы вычислить разницу между двумя датами в каждой строке, поэтому сначала преобразовать строки на сегодняшний день объектов:

df.date_published = pd.to_datetime(df.date_published.str.replace('Not required', '')) 
df.date_sent = pd.to_datetime(df.date_sent.str.replace('Not required', '')) 

Тогда я вычесть одно из другого:

df['delay'] = df.date_published - df.date_sent 

Но это дает мне своеобразные результаты - я t не 226 дней с 06/11/2015 по 23/01/2016:

df 
    date_published date_sent delay 
0  2015-06-11 2015-06-11 0 days 
1   NaT  NaT  NaT 
2   NaT  NaT  NaT 
3  2016-01-23 2015-06-11 226 days 

Что я делаю неправильно? Я использую pandas v0.18.

+0

Ah - Я считаю, что мой формат даты неверен? Я пробовал 'df.date_published = pd.to_datetime (df.date_published.str.replace ('Не требуется', ''), format = '% d /% m /% Y')', но получить ошибку. – Richard

+0

Я не могу воспроизвести финальный стол, используя pandas 18.1 ... Вы не конвертируете '06/11/2015 'и т. Д. В datatime. только «не требуется» – Merlin

ответ

0

Посмотрите, поможет ли это.

print pd.to_datetime('06/11/2016', dayfirst =True, format='%d/%m/%Y', errors = 'ignore') 
    print pd.to_datetime('06/11/2016', format='%m/%d/%Y', errors = 'ignore') 

2016-11-06 00:00:00 
2016-06-11 00:00:00 
+0

Если правильно, можете ли вы повысить? – Merlin

0

Это точно 226 дней между этими датами.

+1

Нет, если вы британцы :) Мне нужно выяснить, как исправить форматирование даты. – Richard

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