Convertir Python dict en un marco de datos

Resuelto anonuser0428 asked hace 11 años • 19 respuestas

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?

anonuser0428 avatar Sep 17 '13 04:09 anonuser0428
Aceptado

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
Andy Hayden avatar Sep 16 '2013 21:09 Andy Hayden

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 dataparámetro en el constructor de DataFrame es una lista de diccionarios. Aquí estamos pasando una lista con un diccionario.

cheevahagadog avatar Oct 05 '2017 03:10 cheevahagadog