Pandas dataframe fillna() solo algunas columnas en su lugar
Estoy tratando de completar ninguno de los valores en un marco de datos de Pandas con 0 solo para un subconjunto de columnas.
Cuando lo hago:
import pandas as pd
df = pd.DataFrame(data={'a':[1,2,3,None],'b':[4,5,None,6],'c':[None,None,7,8]})
print df
df.fillna(value=0, inplace=True)
print df
La salida:
a b c
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 NaN 7.0
3 NaN 6.0 8.0
a b c
0 1.0 4.0 0.0
1 2.0 5.0 0.0
2 3.0 0.0 7.0
3 0.0 6.0 8.0
Reemplaza cada uno None
con 0
's. Lo que quiero hacer es solo reemplazar None
s en las columnas a
y b
, pero no c
.
Cual es la mejor manera de hacer esto?
Aceptado
Puede seleccionar las columnas que desee y hacerlo por tarea:
df[['a', 'b']] = df[['a','b']].fillna(value=0)
El resultado resultante es el esperado:
a b c
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 0.0 7.0
3 0.0 6.0 8.0
Puedes usar dict
, fillna
con diferentes valores para diferentes columnas.
df.fillna({'a':0,'b':0})
Out[829]:
a b c
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 0.0 7.0
3 0.0 6.0 8.0
Después de asignarlo nuevamente
df=df.fillna({'a':0,'b':0})
df
Out[831]:
a b c
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 0.0 7.0
3 0.0 6.0 8.0
Puedes evitar hacer una copia del objeto usando la solución de Wen e inplace=True:
df.fillna({'a':0, 'b':0}, inplace=True)
print(df)
Cuyos rendimientos:
a b c
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 0.0 7.0
3 0.0 6.0 8.0