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>

Respuestas a la pregunta(1)

Su respuesta a la pregunta