Tengo que llenar una columna solo si todos los valores de esa columna son nulos. por ejemplo c
df = pd.DataFrame(data = {"col1":[3, np.nan, np.nan, 21, np.nan], "col2":[4, np.nan, 12, np.nan, np.nan], "col3":[33, np.nan, 55, np.nan, np.nan], "col4":[np.nan, np.nan, np.nan, np.nan, np.nan]}) >>> df col1 col2 col3 col4 0 3.0 4.0 33.0 NaN 1 NaN NaN NaN NaN 2 NaN 12.0 55.0 NaN 3 21.0 NaN NaN NaN 4 NaN NaN NaN NaNEn el ejemplo anterior, tengo que reemplazar los valores de col4 con 100 ya que todos los valores son nulos/NaN.
Así que para el ejemplo anterior. Tengo que obtener la salida como se muestra a continuación.
col1 col2 col3 col4 0 3.0 4.0 33.0 100 1 NaN NaN NaN 100 2 NaN 12.0 55.0 100 3 21.0 NaN NaN 100 4 NaN NaN NaN 100Intenté usar el siguiente comando. Pero reemplaza los valores de una columna solo si contiene al menos 1 valor no nan
df.where(df.isnull().all(axis=1), df.fillna(100), inplace=True)
¿Podría por favor decirme cómo hacer esto?
Gracias
Advertencia : después de que OP modificó la pregunta y dio más detalles sobre el resultado esperado exacto, esta respuesta ya no es válida.
Casi lo tienes ;)
df['col4'] = df['col4'].mask(df.isnull().all(axis=1), 100)Tus errores:
where , por lo que deberías haber invertido tu condición (utilicé mask como alternativa)producción:
col1 col2 col3 col4 0 3.0000 4.0000 33.0000 NaN 1 NaN NaN NaN 100.0000 2 NaN 12.0000 55.0000 NaN 3 21.0000 NaN NaN NaN 4 NaN NaN NaN 100.0000Usa indexing :
df.loc[:, df.isna().all()] = 100 print(df) # Output: col1 col2 col3 col4 0 3.0 4.0 33.0 100.0 1 NaN NaN NaN 100.0 2 NaN 12.0 55.0 100.0 3 21.0 NaN NaN 100.0 4 NaN NaN NaN 100.0Este comando debería ayudar:
df.loc[:, df.isnull().all(axis=0)] = 100Producción:
col1 col2 col3 col4 0 3.0 4.0 33.0 100.0 1 NaN NaN NaN 100.0 2 NaN 12.0 55.0 100.0 3 21.0 NaN NaN 100.0 4 NaN NaN NaN 100.0