Convertir Python dict en un marco de datos
Tengo un diccionario de Python:
{u'2012-07-01': 391,
u'2012-07-02': 392,
u'2012-07-03': 392,
u'2012-07-04': 392,
u'2012-07-05': 392,
u'2012-07-06': 392}
Me gustaría convertir esto en un marco de datos de pandas teniendo las fechas y sus valores correspondientes en dos columnas separadas; el resultado esperado es el siguiente:
Date DateValue
0 2012-07-01 391
1 2012-07-02 392
2 2012-07-03 392
. 2012-07-04 392
. ... ...
¿Existe una forma directa de hacer esto?
El error aquí se debe a que se llama al constructor DataFrame con valores escalares (donde espera que los valores sean una lista/dict/... es decir, que tengan varias columnas):
pd.DataFrame(d)
ValueError: If using all scalar values, you must must pass an index
Podrías tomar los elementos del diccionario (es decir, los pares clave-valor):
In [11]: pd.DataFrame(d.items()) # or list(d.items()) in python 3
Out[11]:
0 1
0 2012-07-02 392
1 2012-07-06 392
2 2012-06-29 391
3 2012-06-28 391
...
In [12]: pd.DataFrame(d.items(), columns=['Date', 'DateValue'])
Out[12]:
Date DateValue
0 2012-07-02 392
1 2012-07-06 392
2 2012-06-29 391
Pero creo que tiene más sentido pasar al constructor de la Serie:
In [21]: s = pd.Series(d, name='DateValue')
Out[21]:
2012-06-08 388
2012-06-09 388
2012-06-10 388
In [22]: s.index.name = 'Date'
In [23]: s.reset_index()
Out[23]:
Date DateValue
0 2012-06-08 388
1 2012-06-09 388
2 2012-06-10 388
Al convertir un diccionario en un marco de datos de pandas donde desea que las claves sean las columnas de dicho marco de datos y los valores sean los valores de las filas, simplemente puede poner corchetes alrededor del diccionario de esta manera:
>>> dict_ = {'key 1': 'value 1', 'key 2': 'value 2', 'key 3': 'value 3'}
>>> pd.DataFrame([dict_])
key 1 key 2 key 3
0 value 1 value 2 value 3
EDITAR: en los documentos de pandas, una opción para el data
parámetro en el constructor de DataFrame es una lista de diccionarios. Aquí estamos pasando una lista con un diccionario.