Tengo una lista de diccionarios como este:
[{'points': 50, 'time': '5:00', 'year': 2010},
{'points': 25, 'time': '6:00', 'month': "february"},
{'points':90, 'time': '9:00', 'month': 'january'},
{'points_h1':20, 'month': 'june'}]
Y quiero convertir esto en pandas DataFrame
como este:
month points points_h1 time year
0 NaN 50 NaN 5:00 2010
1 february 25 NaN 6:00 NaN
2 january 90 NaN 9:00 NaN
3 june NaN 20 NaN NaN
Nota: El orden de las columnas no importa.
¿Cómo puedo convertir la lista de diccionarios en un DataFrame de pandas como se muestra arriba?
python
dictionary
pandas
dataframe
appleLover
fuente
fuente
df = df.set_index('time')
despuéspandas.DataFrame
'{"":{"...
Tenga en cuenta que para un diccionario anidado utiliza el enfoque json_normalize, vea la respuesta detallada de @ cs95Las otras respuestas son correctas, pero no se ha explicado mucho en términos de ventajas y limitaciones de estos métodos. El objetivo de esta publicación será mostrar ejemplos de estos métodos en diferentes situaciones, discutir cuándo usar (y cuándo no usar), y sugerir alternativas.
DataFrame()
`DataFrame.from_records()
` y.from_dict()
Dependiendo de la estructura y el formato de sus datos, hay situaciones en las que los tres métodos funcionan, o algunos funcionan mejor que otros, o algunos no funcionan en absoluto.
Considere un ejemplo muy artificial.
Esta lista consta de "registros" con cada clave presente. Este es el caso más simple que podrías encontrar.
Word en las orientaciones del diccionario:
orient='index'
/'columns'
Antes de continuar, es importante hacer la distinción entre los diferentes tipos de orientaciones de diccionario y el apoyo con pandas. Hay dos tipos principales: "columnas" e "índice".
orient='columns'
Los diccionarios con la orientación de "columnas" tendrán sus claves correspondientes a las columnas en el DataFrame equivalente.
Por ejemplo,
data
arriba está en las "columnas" orientar.Nota: Si está utilizando
pd.DataFrame.from_records
, se supone que la orientación es "columnas" (no puede especificar lo contrario), y los diccionarios se cargarán en consecuencia.orient='index'
Con este oriente, se supone que las claves corresponden a valores de índice. Este tipo de datos es el más adecuado para
pd.DataFrame.from_dict
.Este caso no se considera en el OP, pero aún es útil saberlo.
Establecer índice personalizado
Si necesita un índice personalizado en el DataFrame resultante, puede configurarlo utilizando el
index=...
argumento.Esto no es compatible con
pd.DataFrame.from_dict
.Manejo de llaves / columnas faltantes
Todos los métodos funcionan listos para usar cuando se manejan diccionarios con claves / valores de columna faltantes. Por ejemplo,
Lectura de subconjuntos de columnas
"¿Qué pasa si no quiero leer en cada columna"? Puede especificar esto fácilmente utilizando el
columns=...
parámetroPor ejemplo, del diccionario de ejemplo
data2
anterior, si desea leer solo las columnas "A", "D" y "F", puede hacerlo pasando una lista:Esto no es compatible
pd.DataFrame.from_dict
con las "columnas" orientadas por defecto.Lectura de subconjuntos de filas
No es compatible con ninguno de estos métodos directamente . Tendrá que iterar sobre sus datos y realizar una eliminación inversa en el lugar a medida que itera. Por ejemplo, para extraer sólo el 0 º y 2 º filas de
data2
arriba, puede utilizar:La panacea:
json_normalize
para datos anidadosUna alternativa fuerte y robusta a los métodos descritos anteriormente es la
json_normalize
función que funciona con listas de diccionarios (registros) y, además, también puede manejar diccionarios anidados.Nuevamente, tenga en cuenta que los datos pasados
json_normalize
deben estar en el formato de lista de diccionarios (registros).Como se mencionó,
json_normalize
también puede manejar diccionarios anidados. Aquí hay un ejemplo tomado de la documentación.Para obtener más información sobre los argumentos
meta
yrecord_path
, consulte la documentación.Resumiendo
Aquí hay una tabla de todos los métodos discutidos anteriormente, junto con características / funcionalidades compatibles.
* Use
orient='columns'
y luego transponga para obtener el mismo efecto queorient='index'
.fuente
En pandas 16.2, tuve que hacer
pd.DataFrame.from_records(d)
para que esto funcionara.fuente
deque
0.17.1
con solución @joris0.18.1
, uno debe usarfrom_records
si no todos los diccionarios tienen las mismas claves.También puedes usarlo
pd.DataFrame.from_dict(d)
como:fuente
dict
s, no de una sola,dict
como supuso en su respuesta.Sé que algunas personas se encontrarán con esto y no encontrarán nada que ayude. La forma más fácil que he encontrado para hacerlo es así:
¡Espero que esto ayude a alguien!
fuente
y simple llamada:
fuente
fuente
Para convertir una lista de diccionarios en un DataFrame de pandas, puede usar "append":
Tenemos un diccionario llamado
dic
y DIC tiene 30 elementos de la lista (list1
,list2
, ...,list30
)total_df
)total_df
conlist1
total_df
fuente
DataFrame()
,DataFrame.from_records()
y.from_dict()
?