2014-04-30 11 views
6

Ho l'elenco seguenti timeseries in pitone:pitone lista valori chiave di serie panda

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)] 

Questa lista è una coppia di valori chiave in cui chiave è datetime e il valore è quello dopo separati da una virgola. Voglio creare serie di panda da chiavi (datetime) e valori (valore decimale). Chiunque può aiutarmi a suddividere l'elenco sopra riportato del valore delle serie temporali in due liste (lista1 e lista2) in modo da poter creare l'oggetto Serie pandas per ulteriori analisi dal seguente codice?

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

Quindi vuoi separare la lista di tuple in 2 liste, una di chiavi e una di valori? – EdChum

+0

Non richiamare gli oggetti 'list' mentre si sovrascrive il builtin. – Ffisegydd

risposta

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 

Oppure, evitando il folle desiderio di fare battute:

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

Se i dati sono estremamente lungo, è possibile evitare di creare le tuple intermedi utilizzando itertools.izip:

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

Mi piace questa risposta perché questa imposta il datetime (chiave) come indice Serie che è il requisito qui – Adds

3

È possibile utilizzare zip e splat per decomprimere i vostri argomenti, come di seguito.

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) crea effettivamente due tuple di dati, uno è una tupla dei tuoi datetime oggetti, uno è i vostri valori. Questi due vengono quindi passati come argomenti a pd.Series.

0

Prova

d = {} 

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

s = pd.series (d)