Tengo un diccionario con cada tecla que contiene una lista de valores flotantes. Estas listas no son del mismo tamaño.
Me gustaría convertir este diccionario en un marco de datos de pandas para poder realizar algunas funciones de análisis en los datos fácilmente, como (mínimo, máximo, promedio, desviación estándar, más).
Mi diccionario se ve así:
{ 'key1': [10, 100.1, 0.98, 1.2], 'key2': [72.5], 'key3': [1, 5.2, 71.2, 9, 10.11, 12.21, 65, 7] } ¿Cuál es la mejor manera de incluir esto en un marco de datos para que pueda utilizar funciones básicas como sum , mean , describe , std ?
Los ejemplos que encuentro (como el enlace anterior), asumen que cada una de las claves tiene la misma cantidad de valores en la lista.
d={ 'key1': [10, 100.1, 0.98, 1.2], 'key2': [72.5], 'key3': [1, 5.2, 71.2, 9, 10.11, 12.21, 65, 7] } df=pd.DataFrame.from_dict(d,orient='index').transpose() Entonces df es
key3 key2 key1 0 1.00 72.5 10.00 1 5.20 NaN 100.10 2 71.20 NaN 0.98 3 9.00 NaN 1.20 4 10.11 NaN NaN Tenga en cuenta que numpy tiene algunas funciones integradas que pueden hacer cálculos ignorando los valores de NaN , que pueden ser relevantes aquí. Por ejemplo, si desea encontrar la media de la columna 'key1' , puede hacerlo de la siguiente manera:
import numpy as np np.nanmean(df[['key1']]) 28.07 Otras funciones útiles incluyen numpy.nanstd, numpy.nanvar, numpy.nanmedian, numpy.nansum .
EDITAR: tenga en cuenta que las funciones de su enlace de funciones básicas también pueden manejar valores nan . Sin embargo, sus estimadores pueden ser diferentes de los de numpy. Por ejemplo, calculan el estimador imparcial de la varianza de la muestra , mientras que la versión numpy calcula el estimador "habitual" de la varianza de la muestra .
your_dict = { 'key1': [10, 100.1, 0.98, 1.2], 'key2': [72.5], 'key3': [1, 5.2, 71.2, 9, 10.11, 12.21, 65, 7] } pd.concat({k: pd.Series(v) for k, v in your_dict.items()}) key1 0 10.00 1 100.10 2 0.98 3 1.20 key2 0 72.50 key3 0 1.00 1 5.20 2 71.20 3 9.00 4 10.11 5 12.21 6 65.00 7 7.00 dtype: float64 O con axis=1
your_dict = { 'key1': [10, 100.1, 0.98, 1.2], 'key2': [72.5], 'key3': [1, 5.2, 71.2, 9, 10.11, 12.21, 65, 7] } pd.concat({k: pd.Series(v) for k, v in your_dict.items()}, axis=1) key1 key2 key3 0 10.00 72.5 1.00 1 100.10 NaN 5.20 2 0.98 NaN 71.20 3 1.20 NaN 9.00 4 NaN NaN 10.11 5 NaN NaN 12.21 6 NaN NaN 65.00 7 NaN NaN 7.00Le sugiero que simplemente cree un dictado de Serie, ya que sus claves no tienen la misma cantidad de valores:
{ key: pd.Series(val) for key, val in x.items() }Luego puede hacer operaciones de Pandas en cada columna individualmente.
Una vez que tenga eso, si realmente quiere un DataFrame, puede:
pd.DataFrame({ key: pd.Series(val) for key, val in x.items() }) key1 key2 key3 0 10.00 72.5 1.00 1 100.10 NaN 5.20 2 0.98 NaN 71.20 3 1.20 NaN 9.00 4 NaN NaN 10.11 5 NaN NaN 12.21 6 NaN NaN 65.00 7 NaN NaN 7.00