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