2016-07-29 12 views
0

Ich habe einen Datenrahmen, der wie folgt aussieht:merkwürdige Ergebnisse von Timedelta mit Pandas

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

Ich mag den Unterschied zwischen den beiden Daten in jeder Zeile berechnen, so dass ich zuerst die Saiten auf dem neuesten Stand Objekte konvertieren:

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', '')) 

Dann ziehe ich eine von den anderen:

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

Aber das gibt mir eigenartige Ergebnisse - i t ist nicht 226 Tage zwischen 06/11/2015 und 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 

Was mache ich falsch? Ich benutze Pandas v0.18.

+0

Ah - ich denke, mein Datumsformat ist falsch? Ich habe 'df.date_published = pd.to_datetime (df.date_published.str.replace ('Not required', ''), format = '% d /% m /% Y') 'versucht, bekomme aber einen Fehler. – Richard

+0

Ich kann nicht Final Table mit Pandas 18.1 reproduzieren ... Sie konvertieren '06/11/2015 'usw. nicht zur Datenzeit. nur "nicht erforderlich" – Merlin

Antwort

0

Sehen Sie, ob dies hilft.

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

Wenn richtig, können Sie upvote? – Merlin

0

Zwischen diesen Daten liegen genau 226 Tage.

+1

Nicht, wenn Sie britisch sind :) Ich muss herausfinden, wie man die Datumsformatierung repariert. – Richard

Verwandte Themen