Memory manera eficiente de almacenar valores bool y NaN en pandas
Estoy trabajando con un conjunto de datos bastante grande (más de 4 GB), que importé enpandas
. Algunas columnas de este conjunto de datos son simples indicadores de Verdadero / Falso, y, naturalmente, la forma más eficiente de almacenar estos sería usar unabool
dtype para esta columna. Sin embargo, la columna también contiene algunos valores de NaN que quiero preservar. En este momento, esto lleva a que la columna tenga dtype float (con valores1.0
, 0.0
ynp.nan
) u objeto, pero ambos usan demasiada memoria.
Como ejemplo
df = pd.DataFrame([[True,True,True],[False,False,False],
[np.nan,np.nan,np.nan]])
df[1] = df[1].astype(bool)
df[2] = df[2].astype(float)
print(df)
print(df.memory_usage(index=False, deep=True))
print(df.memory_usage(index=False, deep=False))
resultados en
0 1 2
0 True True 1.0
1 False False 0.0
2 NaN True NaN
0 100
1 3
2 24
dtype: int64
0 24
1 3
2 24
dtype: int64
Cuál sería la forma más eficiente de almacenar este tipo de valores, sabiendo que solo pueden tomar 3 tipos diferentes de valores:True
, False
y<undefined>