Digamos que tengo un diccionario con 10 pares clave-valor. Cada entrada contiene una matriz numerosa. Sin embargo, la longitud de la matriz no es la misma para todos ellos.
¿Cómo puedo crear un marco de datos donde cada columna contiene una entrada diferente?
Cuando intento:
pd.DataFrame(my_dict)
Yo obtengo:
ValueError: arrays must all be the same length
¿Alguna forma de superar esto? Estoy feliz de que Pandas use NaN
para rellenar esas columnas para las entradas más cortas.
pd.Series(...)
(asumiendoimport pandas as pd
en la sección de importación)pd.DataFrame({k: pd.Series(l) for k, l in d.items()})
Aquí tienes una forma sencilla de hacerlo:
fuente
columns
pero este ya es el predeterminado. Ver la documentación de pandas - pandas.DataFrame.from_dictA continuación, se muestra una forma de ordenar su sintaxis, pero aún hacer esencialmente lo mismo que estas otras respuestas:
También existe una sintaxis similar para las listas:
Otra sintaxis de las listas es:
Es posible que, además, tenga que transponer el resultado y / o cambiar los tipos de datos de la columna (flotante, entero, etc.).
fuente
Si bien esto no responde directamente a la pregunta del OP. Encontré que esta es una excelente solución para mi caso cuando tenía matrices desiguales y me gustaría compartir:
de la documentación de pandas
fuente
También puede utilizar
pd.concat
juntoaxis=1
con una lista depd.Series
objetos:fuente
Ambas líneas siguientes funcionan perfectamente:
Pero con% timeit en Jupyter, tengo una relación de 4x la velocidad para B vs A, lo cual es bastante impresionante, especialmente cuando se trabaja con un gran conjunto de datos (principalmente con una gran cantidad de columnas / características).
fuente
Si no desea que se muestre
NaN
y tiene dos longitudes particulares, también funcionaría agregar un 'espacio' en cada celda restante.Si tiene más de 2 longitudes de entradas, es aconsejable crear una función que utilice un método similar.
fuente
¡pd.DataFrame ([my_dict]) servirá!
fuente