2016-09-05 3 views
1

Ich habe einen Datenrahmen wie folgt: Und dieser DataFrame heißt df_NoMissing_IDV.Python - Datetime Berechnung zwischen zwei Spalten in Python Pandas

NoDemande NoUsager Sens IdVehiculeUtilise Fait HeureArriveeSurSite HeureEffective  Periods 
42196000013 000001 +   287Véh   1 11/07/2015 08:02:07 11/07/2015 08:02:13 Matin 
42196000013 000001 -   287Véh   1 11/07/2015 08:17:09 11/07/2015 08:17:13 Matin 
42196000002 000314 +   263Véh   1 11/07/2015 09:37:43 11/07/2015 09:53:37 Matin 
42196000016 002372 +   287Véh   1 11/07/2015 09:46:42 11/07/2015 10:01:39 Matin 
42196000015 000466 +   287Véh   1 11/07/2015 09:46:42 11/07/2015 10:01:39 Matin 
42196000002 000314 -   263Véh   1 11/07/2015 10:25:17 11/07/2015 10:38:11 Matin 
42196000015 000466 -   287Véh   1 11/07/2015 10:48:51 11/07/2015 10:51:30 Matin 
42196000016 002372 -   287Véh   1 11/07/2015 11:40:56 11/07/2015 11:41:01 Matin 
42196000004 002641 +   263Véh   1 11/07/2015 13:39:29 11/07/2015 13:52:50 Soir 
42196000004 002641 -   263Véh   1 11/07/2015 13:59:56 11/07/2015 14:07:41 Soir 

Ich brauche die marge zwischen Spalte HeureArriveeSurSite und HeureEffective zu bekommen, und sie sind bereits datetime.datetime() Daten.

Und hier ist eine neue DataFrame namens df1.

df1 = df_NoMissing_IDV[(df_NoMissing_IDV['Sens'] == '+') & (df_NoMissing_IDV['Periods'] == 'Matin')] 

Und df1 sieht wie folgt aus:

NoDemande NoUsager Sens IdVehiculeUtilise Fait HeureArriveeSurSite HeureEffective  Periods 
42196000013 000001 +   287Véh   1 11/07/2015 08:02:07 11/07/2015 08:02:13 Matin 
42196000002 000314 +   263Véh   1 11/07/2015 09:37:43 11/07/2015 09:53:37 Matin 
42196000016 002372 +   287Véh   1 11/07/2015 09:46:42 11/07/2015 10:01:39 Matin 
42196000015 000466 +   287Véh   1 11/07/2015 09:46:42 11/07/2015 10:01:39 Matin 

Da sie alle datetime.datetime() Daten sind, habe ich versucht, die Subtraktion zu tun direkt mit:

df_NoMissing_IDV['DureeService'] = df1['HeureEffective']-df1['HeureArriveeSurSite'] 

Aber es kehrte TypeError: unsupported operand type(s) for -: 'unicode' and 'unicode'

Und ich habe auch versucht, die Berechnung zu machen mit datetime.time() Typ, und es kehrte mit TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time' zurück Was soll ich damit machen?

EDIT

ich konvertieren Spalten in df1-datetime():

df1.HeureArriveeSurSite = pd.to_datetime(df1.HeureArriveeSurSite) 
df1.HeureEffective = pd.to_datetime(df1.HeureEffective) 

Aber der nächste Schritt ist immer noch falsch, die zurückgegeben: ValueError: cannot reindex from a duplicate axis

Und wenn ich konvertieren Spalten in df_NoMissing_IDV zu datetime() :

df_NoMissing_IDV.HeureArriveeSurSite = pd.to_datetime(df_NoMissing_IDV.HeureArriveeSurSite) 
df_NoMissing_IDV.HeureEffective = pd.to_datetime(df_NoMissing_IDV.HeureEffective) 

Das gleiche Problem bleibt.

Jede Hilfe wird ~

+0

Ich glaube, Sie Spalten konvertieren zu "datetime" - 'df_NoMissing_IDV.HeureArriveeSurSite = pd.to_datetime (df_NoMissing_IDV.HeureArriveeSurSite) ' ' df_NoMissing_IDV.HeureEffective = pd.to_datetime (df_NoMissing_IDV.HeureEffective) ' – jezrael

+0

Sie meinen, Spalten in DataFrame =' df1' in 'datetime' zu ​​konvertieren? Weil Spalten in 'df_NoMissing_IDV' bereits in' datetime' stehen. Aber der nächste Schritt ist immer noch falsch. 'df_NoMissing_IDV ['DureeService'] = df1 ['HeureEffective'] - df1 ['HeureArriveeSurSite']', es wurde zurückgegeben: 'ValueError: kann von einer doppelten Achse nicht neu indizieren'. – ch36r5s

+0

Hmmm. Es gibt einige Duplikate. Können Sie ein Beispiel hinzufügen, das einen Fehler zurückgibt? – jezrael

Antwort

1

klar sein, denke ich, dass die Ursache für den Fehler ist, dass Sie einige dplicates in Ihre Daten haben.

zwei Dinge ausprobieren:

df_NoMissing_IDV['DureeService'] = df1['HeureEffective'].values -df1['HeureArriveeSurSite'].values 

Oder:

df1 = df1.reset_index() 

EDIT: Was Sie können auch versuchen, ist timedelta:

>>> import datetime 
>>> time_difference = df1['HeureEffective']-df1['HeureArriveeSurSite'] 
>>> time_difference_in_seconds = time_difference/timedelta(seconds=1) 
+0

Die erste zurückgegeben: 'ValueError: Länge der Werte entspricht nicht der Länge des Index '. Und der zweite zurückgegeben: 'ValueError: kann nicht level_0 einfügen, bereits existiert' – ch36r5s

+0

Versuchen Sie Folgendes: df1 = df1.reset_index (drop = True) –

+0

Es hat funktioniert. Und diese Spalte wird dem 'DataFrame'' df1' hinzugefügt, soll das so sein? – ch36r5s

Verwandte Themen