python key value list to panda series
In [34]: pd.Series(*zip(*((b,a) for a,b in data)))Out[34]: 2008-07-15 15:00:00 0.1342008-07-15 16:00:00 0.0002008-07-15 17:00:00 0.0002008-07-15 18:00:00 0.0002008-07-15 19:00:00 0.0002008-07-15 20:00:00 0.0002008-07-15 21:00:00 0.0002008-07-15 22:00:00 0.0002008-07-15 23:00:00 0.0002008-07-16 00:00:00 0.000dtype: float64
Or, eschewing the insane desire to make one-liners:
dates, vals = zip(*data)s = pd.Series(vals, index=dates)
If the data is extremely long, you can avoid creating the intermediate tuples by using itertools.izip:
import itertools as ITdates, vals = IT.izip(*data)s = pd.Series(vals, index=dates)
You can use zip
and splat
to unpack your arguments as below.
import pandas as pdmy_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)
effectively creates two tuples out of your data, one is a tuple of your datetime
objects, one is your values. These two are then passed as the arguments to pd.Series
.
Try
d = {}for i in my_list: d[i[0]] = i[1]s = pd.series (d)