English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Datos dispersos de Pandas

Ejemplo de operaciones de datos dispersos de Pandas

Cuando se omite el valor específico (NaN /Los valores faltantes, aunque se puede elegir cualquier valor, se 'comprimirán' cuando se coincida con cualquier dato. Un objeto SparseIndex especial rastrea las ubicaciones donde los datos están 'dispersos'. En un ejemplo, esto tendrá más sentido. Todas las estructuras de datos estándar de Pandas aplican el método to_sparse:

 import pandas as pd
 import numpy as np
 ts = pd.Series(np.random.randn(10))
 ts[2:-2] = np.nan
 sts = ts.to_sparse()
 print sts

Los resultados de la ejecución son los siguientes:

 0 -0.810497
 1 -1.419954
 2 NaN
 3 NaN
 4 NaN
 5 NaN
 6 NaN
 7 NaN
 8 0.439240
 9 -1.095910
 dtype: float64
 BlockIndex
 Ubicaciones de bloque: array([0, 8], dtype=int32)
 Longitudes de bloque: array([2, 2], dtype=int32)

Por razones de eficiencia de memoria, existen objetos dispersos.
Ahora supongamos que tiene un gran DataFrame NA y ejecuta el siguiente código-

 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(10000, 4))
 df.ix[:9998] = np.nan
 sdf = df.to_sparse()
 print sdf.density

Los resultados de la ejecución son los siguientes:

   0.0001

Se puede convertir cualquier objeto disperso a la forma densa estándar llamando a to_dense

 import pandas as pd
 import numpy as np
 ts = pd.Series(np.random.randn(10))
 ts[2:-2] = np.nan
 sts = ts.to_sparse()
 print sts.to_dense()

Los resultados de la ejecución son los siguientes:

 0 -0.810497
 1 -1.419954
 2 NaN
 3 NaN
 4 NaN
 5 NaN
 6 NaN
 7 NaN
 8 0.439240
 9 -1.095910
 dtype: float64

Tipos de datos dispersos

Los datos dispersos deben tener el mismo dtype que su representación densa. Actualmente, se admite float64,int64Y booldtypes. Dependiendo del dtype original, el valor predeterminado de fill_value cambia-

float64 − np.nan

int64 − 0

bool − False

A continuación, ejecutamos el siguiente código para entenderlos:

 import pandas as pd
 import numpy as np
 s = pd.Series([1, np.nan, np.nan])
 print s
 s.to_sparse()
 print s

Los resultados de la ejecución son los siguientes:

 0 1.0
 1 NaN
 2 NaN
 dtype: float64
 0 1.0
 1 NaN
 2 NaN
 dtype: float64