2014-04-30 5 views
6

Ich habe folgende Liste Zeitreihe in Python:Python Schlüsselwerteliste PANDA-Reihe

list = [(datetime.datetime(2008, 7, 15, 15, 0), 0.134), 
    (datetime.datetime(2008, 7, 15, 16, 0), 0.0), 
    (datetime.datetime(2008, 7, 15, 17, 0), 0.0), 
    (datetime.datetime(2008, 7, 15, 18, 0), 0.0), 
    (datetime.datetime(2008, 7, 15, 19, 0), 0.0), 
    (datetime.datetime(2008, 7, 15, 20, 0), 0.0), 
    (datetime.datetime(2008, 7, 15, 21, 0), 0.0), 
    (datetime.datetime(2008, 7, 15, 22, 0), 0.0), 
    (datetime.datetime(2008, 7, 15, 23, 0), 0.0), 
    (datetime.datetime(2008, 7, 16, 0, 0), 0.0)] 

Diese Liste ist ein Schlüssel-Wert-Paar in die Schlüsseldatumzeit ist und der Wert ist derjenige, dass, nachdem durch ein Komma getrennt. Ich möchte Pandas-Serien aus Schlüsseln (Datetime) und Werten (Dezimalwert) erstellen. Jeder kann mir helfen, die obige Liste von Zeitreihen Wert in zwei Listen (list1 und list2) zu teilen, so dass ich das Pandas Series Objekt für die weitere Analyse aus dem folgenden Code erstellen kann?

import pandas as pd 
ts = pd.Series(list1, list2) 
+0

Sie wollen also die Liste der Tupel in 2 Listen aufteilen, eine der Schlüssel und eine der Werte? – EdChum

+0

Rufen Sie die Objekte 'list' nicht auf, wenn Sie das eingebaute Objekt überschreiben. – Ffisegydd

Antwort

4
In [34]: pd.Series(*zip(*((b,a) for a,b in data))) 
Out[34]: 
2008-07-15 15:00:00 0.134 
2008-07-15 16:00:00 0.000 
2008-07-15 17:00:00 0.000 
2008-07-15 18:00:00 0.000 
2008-07-15 19:00:00 0.000 
2008-07-15 20:00:00 0.000 
2008-07-15 21:00:00 0.000 
2008-07-15 22:00:00 0.000 
2008-07-15 23:00:00 0.000 
2008-07-16 00:00:00 0.000 
dtype: float64 

Oder die wahnsinnige Lust eschewing Einzeiler zu machen:

dates, vals = zip(*data) 
s = pd.Series(vals, index=dates) 

Wenn die Daten extrem lang ist, können Sie die Zwischen Tupeln Erstellung vermeiden, indem itertools.izip mit:

import itertools as IT 
dates, vals = IT.izip(*data) 
s = pd.Series(vals, index=dates) 
Versuchen
+0

Ich mag diese Antwort, weil diese die Datetime (Schlüssel) als Serienindex setzt, was hier die Voraussetzung ist – Adds

3

können Sie zip und splat benutzen, um Ihre Argumente wie unten zu entpacken.

import pandas as pd 

my_list = [(datetime.datetime(2008, 7, 15, 15, 0), 0.134), 
     (datetime.datetime(2008, 7, 15, 16, 0), 0.0), 
     (datetime.datetime(2008, 7, 15, 17, 0), 0.0), 
     (datetime.datetime(2008, 7, 15, 18, 0), 0.0), 
     (datetime.datetime(2008, 7, 15, 19, 0), 0.0), 
     (datetime.datetime(2008, 7, 15, 20, 0), 0.0), 
     (datetime.datetime(2008, 7, 15, 21, 0), 0.0), 
     (datetime.datetime(2008, 7, 15, 22, 0), 0.0), 
     (datetime.datetime(2008, 7, 15, 23, 0), 0.0), 
     (datetime.datetime(2008, 7, 16, 0, 0), 0.0)] 

ts = pd.Series(zip(*my_list)) 

zip(*my_list) erzeugt effektiv zwei Tupel aus Ihren Daten, der eine ein Tupel Ihrer datetime Objekte ist, ist Ihre Werte. Diese beiden werden dann als Argumente an pd.Series übergeben.

0

d = {} 

for i in my_list: 
    d[i[0]] = i[1] 

s = pd.series (d)