2016-08-21 2 views
0

Ich habe eine Liste von Datetime-Werten und möchte die Liste in eine pandas.Series-Instanz konvertieren. Der Code läuft auf die folgende unten:Pandas konvertiert die Liste der Datetime-Werte falsch

from datetime import datetime 
from datetime import timedelta 
from dateutil import parser 

day = parser.parse('2016-08-07T00:00:00Z') 
dates = [day + timedelta(days=delta) for delta in range(80)] 

pandas.Series(dates) 

Was mir ein Rätsel ist, dass der Code über viele Datetime-Instanz 1970-01-01 zurückgegeben:

0 2016-08-07 00:00:00+00:00 
1 1970-01-01 00:00:00+00:00 
2 1970-01-01 00:00:00+00:00 
3 1970-01-01 00:00:00+00:00 
4 1970-01-01 00:00:00+00:00 
5 1970-01-01 00:00:00+00:00 
... 

Wenn ich jedoch jede Unterliste von konvertieren 60 Elementen oder weniger, kann ich eine richtige Serie zurück:

from datetime import datetime 
from datetime import timedelta 
from dateutil import parser 

day = parser.parse('2016-08-07T00:00:00Z') 
dates = [day + timedelta(days=delta) for delta in range(80)] 

pandas.Series(dates[0:60]) 

Beachten Sie die letzte Zeile, die Eingabe von pandas.Series wird Daten [0:60]. In der Tat kann es irgendein Datum sein [n: n + 60], wobei n zwischen 0 und len (Termine) - 60.

0 2016-08-07 00:00:00+00:00 
1 2016-08-08 00:00:00+00:00 
2 2016-08-09 00:00:00+00:00 
3 2016-08-10 00:00:00+00:00 
4 2016-08-11 00:00:00+00:00 
5 2016-08-12 00:00:00+00:00 
... 

ich auch die Pandas Dokument auf Serie und Datumzeit gelesen und versucht Pandas 'Zeitstempel, aber immer noch das gleiche Ergebnis. Die Pandas Version 0.18.1 und die Python-Version vom Kernel ipython Notebook verwendet wird, ist 2.7.3:

print pandas.__version__ 

import sys 
print(sys.version) 

Der Ausgang ist

0.18.1 
2.7.3 (default, Jun 22 2015, 19:33:41) 
[GCC 4.6.3] 

Irgendwelche Hinweise auf das, was ich sehe in sollte finden warum dieses Problem auftritt und wie Sie es beheben können?

Danke,

+0

Ich kann dieses Problem nicht mit Pandas 0.18.1 in Verbindung mit Python (3.5.1 oder 2.7.11) – MaxU

+0

@ MaxU Strange reproduzieren. Meine Pandas ist 0.18.1 und die Python-Version ist 2.7.3. –

Antwort

0

Ich weiß nicht, was mit Ihrer Python-Version falsch ist, aber man kann und sollte vektorisiert (dh wesentlich effizienter und schneller) Pandas Methoden anstelle von Vanille Python Methoden verwenden:

In [181]: pd.Series([pd.to_datetime('2016-08-07T00:00:00Z') + pd.Timedelta(days=delta) for delta in range(80)]) 
Out[181]: 
0 2016-08-07 
1 2016-08-08 
2 2016-08-09 
3 2016-08-10 
4 2016-08-11 
5 2016-08-12 
6 2016-08-13 
7 2016-08-14 
8 2016-08-15 
9 2016-08-16 
10 2016-08-17 
11 2016-08-18 
12 2016-08-19 
13 2016-08-20 
14 2016-08-21 
15 2016-08-22 
16 2016-08-23 
17 2016-08-24 
18 2016-08-25 
19 2016-08-26 
20 2016-08-27 
21 2016-08-28 
22 2016-08-29 
23 2016-08-30 
24 2016-08-31 
25 2016-09-01 
26 2016-09-02 
27 2016-09-03 
28 2016-09-04 
29 2016-09-05 
     ... 
0

Pandas hat die Nutzenfunktion pd.date_range diese Art von Objekten zu erzeugen:

import pandas as pd 

pd.Series(pd.date_range(start='2016-08-07T00:00:00Z', periods=80, freq='D')) 

Ausgang:

0 2016-08-07 00:00:00+00:00 
1 2016-08-08 00:00:00+00:00 
2 2016-08-09 00:00:00+00:00 
3 2016-08-10 00:00:00+00:00 
4 2016-08-11 00:00:00+00:00 
5 2016-08-12 00:00:00+00:00 
6 2016-08-13 00:00:00+00:00 
7 2016-08-14 00:00:00+00:00 
8 2016-08-15 00:00:00+00:00 
9 2016-08-16 00:00:00+00:00 
       ...   
70 2016-10-16 00:00:00+00:00 
71 2016-10-17 00:00:00+00:00 
72 2016-10-18 00:00:00+00:00 
73 2016-10-19 00:00:00+00:00 
74 2016-10-20 00:00:00+00:00 
75 2016-10-21 00:00:00+00:00 
76 2016-10-22 00:00:00+00:00 
77 2016-10-23 00:00:00+00:00 
78 2016-10-24 00:00:00+00:00 
79 2016-10-25 00:00:00+00:00 
dtype: datetime64[ns, UTC] 
Verwandte Themen