Python Pandas - Datos escasos
Los objetos dispersos se “comprimen” cuando se omite cualquier dato que coincida con un valor específico (NaN / valor perdido, aunque se puede elegir cualquier valor). Un objeto SparseIndex especial rastrea donde los datos se han “dispersado”. Esto tendrá mucho más sentido en un ejemplo. Todas las estructuras de datos estándar de Pandas aplican lato_sparse método -
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
Sus output es como sigue -
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
Block locations: array([0, 8], dtype=int32)
Block lengths: array([2, 2], dtype=int32)
Los objetos dispersos existen por razones de eficiencia de la memoria.
Supongamos ahora que tiene un NA DataFrame grande y ejecute 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
Sus output es como sigue -
0.0001
Cualquier objeto disperso se puede convertir de nuevo a la forma densa estándar llamando 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()
Sus output es como sigue -
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 D dispersos
Los datos dispersos deben tener el mismo tipo d que su representación densa. Actualmente,float64, int64 y booldtypesson compatibles. Dependiendo del originaldtype, fill_value default cambios -
float64 - np.nan
int64 - 0
bool - falso
Ejecutemos el siguiente código para entender lo mismo:
import pandas as pd
import numpy as np
s = pd.Series([1, np.nan, np.nan])
print s
s.to_sparse()
print s
Sus output es como sigue -
0 1.0
1 NaN
2 NaN
dtype: float64
0 1.0
1 NaN
2 NaN
dtype: float64