2016-08-08 28 views
1

Ich habe einen Pandas-Datenrahmen mit zwei Daten in ihnen. Ich möchte den Unterschied in Tagen zwischen ihnen nehmen. Aber der resultierende Unterschied sieht wie eine Zeichenfolge ex ('7 Tage') aus. Gibt es eine Möglichkeit, dies nur in den ganzzahligen Datumsunterschied zu ändern?Ändern pd Datetime-Objekt zu Ganzzahl

y['datePulled'] = pd.to_datetime(y['datePulled']) 
y['Dates'] = pd.to_datetime(y['Dates']) 
y['Datediff'] = y['datePulled'] - y['Dates'] 
y['Datediff'] 
0 7 days 
1 6 days 
2 5 days 
3 4 days 
4 3 days 
5 2 days 
6 1 days 

Antwort

2

können Sie verwenden:

(y['Datediff']/np.timedelta64(1, 'D')).astype(int) 

Oder:

y['Datediff'].dt.days 

Probe:

import pandas as pd 
import numpy as np 

y = pd.DataFrame({ 'datePulled': ['2016-01-05','2016-01-04'], 
        'Dates': ['2016-01-01','2016-01-02']}) 

y['datePulled'] = pd.to_datetime(y['datePulled']) 
y['Dates'] = pd.to_datetime(y['Dates']) 
y['Datediff'] = y['datePulled'] - y['Dates'] 
print (y) 

#output is float, cast to int 
y['Datediff1'] = (y['Datediff']/np.timedelta64(1, 'D')).astype(int) 

y['Datediff2'] = y['Datediff'].dt.days 
print (y) 
     Dates datePulled Datediff Datediff1 Datediff2 
0 2016-01-01 2016-01-05 4 days   4   4 
1 2016-01-02 2016-01-04 2 days   2   2 

Bei größeren Datenrahmen erste Methode ist schneller:

y = pd.concat([y]*1000).reset_index(drop=True) 

In [236]: %timeit (y['Datediff']/np.timedelta64(1, 'D')).astype(int) 
1000 loops, best of 3: 789 µs per loop 

In [237]: %timeit y['Datediff'].dt.days 
100 loops, best of 3: 15.3 ms per loop 
+0

gibt es die folgenden Fehler: Traceback (jüngste Aufforderung zuletzt): File "" Linie 1 in Typeerror: Ungültige Datetime-Einheit "d" in den Metadaten – mangodreamz

+0

, das funktioniert! Danke, Jezrael – mangodreamz