2017-06-16 6 views
3

Ich habe den folgenden Datenrahmen.Fehler beim Subtrahieren von Datetime Spalten in Pandas

Date Returned Start Date 
0 2017-06-02 2017-04-01 
1 2017-06-02 2017-04-01 
2 2017-06-02 2017-04-01 
3 2017-06-02 2017-02-28 
4 2017-06-02 2017-02-28 
5 2017-06-02 2016-07-20 
6 2017-06-02 2016-07-20 

Beide Säulen sind vom Typ datetime64.

Aber wenn ich versuche, die Zeitdeltas zwischen den beiden Spalten der Daten zu finden, bekomme ich diesen Fehler.

subframe['Delta']=subframe['Date Returned'] - subframe['Start Date'] 

TypeError: data type "datetime" not understood 

Gibt es eine Lösung dafür? Ich habe alles ausprobiert, was mir einfällt, und habe jetzt die meisten Haare herausgezogen. Jede Hilfe wird sehr geschätzt. I did find someone posting the same problem, but no one really answered it.

+0

Es funktioniert gut auf meinem Computer. – Ding

+0

Derselbe Code macht in meinem Fall keine Fehler. Welche Version verwenden Sie? Oder Sie können Pakete deinstallieren und es erneut versuchen. –

+0

Ich habe versucht, Pandas zu deinstallieren und neu zu installieren. Gleiches Ergebnis. Dies läuft unter Windows 7, aber ich kann mir nicht vorstellen, dass dies einen Unterschied machen würde. – bemery

Antwort

2

Ich erhielt den gleichen Fehler in Pandas 0.18.1. Hier ist eine Behelfslösung iterativ auf einzelne Anfang-End-Paare Betrieb:

d['diff'] = [ret - start for start, ret in zip(d['Start'], d['Returned'])] 

d ist jetzt:

Returned  Start  diff 
0 2017-06-02 2017-04-01 62 days 
1 2017-06-02 2017-04-01 62 days 
2 2017-06-02 2017-04-01 62 days 
3 2017-06-02 2017-02-28 94 days 
4 2017-06-02 2017-02-28 94 days 
5 2017-06-02 2016-07-20 317 days 
6 2017-06-02 2016-07-20 317 days 

Diese Problemumgehung ist viel langsamer als ich könnte mir vorstellen, die native Pandas Implementierung wäre. Seufzer.

2

Ich denke, das Problem wurde möglicherweise in neueren Versionen von Pandas (und vielleicht relevant, numpy) gelöst, und vielleicht war es immer Windows-spezifisch. Auf dem Computer, an dem ich gerade arbeite (Pandas 0.18.0, 1.13, unter Windows 7), ist es immer noch nicht gelöst.

Für diejenigen, die in der gleichen Bedingung wie mich gibt es eine Abhilfe, die ein ziemlich schneller als @ Blacksite Werke:

subframe['Delta'] = subframe['Date Returned'].values - subframe['Start Date'].values 

Dumme, wie es aussieht, setzen die „.values“ wandelt sie datetime64 Objekte numpy , die sie richtig subtrahiert. Wenn Sie es einer Pandas Data Frame-Spalte zuweisen, wird es wieder korrekt in das Timestamp-Objekt konvertiert.

Auf meinem Datenframe (etwa 90k Zeilen) dauert dies weniger als 0,01s (alle verwendet, um eine neue Spalte in Pandas zu erstellen und von Numpy zu Timestamp konvertieren), während die andere Problemumgehung dauert etwa 1,5s.