Estoy tratando de completar ninguno de los valores en un marco de datos de Pandas con 0 para solo 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 columnas a
y b
, pero no c
.
Cual es la mejor manera de hacer esto?
df[['a', 'b']] = df[['a','b']].fillna(value=0)
seguirá funcionandoinplace
seguirá funcionando en una copia. No sé si es el casofillna
o no. Vea esta respuesta de uno de los desarrolladores principales de pandas.Puede usar
dict
,fillna
con diferentes valores para diferentes columnasDespués de asignarlo de nuevo
fuente
fromkeys
si quieres, +1df.fillna({'a':0,'b':0}, inplace=True)
Puede evitar hacer una copia del objeto utilizando la solución de Wen e inplace = True:
Cuyos rendimientos:
fuente
Así es como puedes hacerlo todo en una línea:
Desglose:
df[['a', 'b']]
selecciona las columnas para las que desea llenar los valores de NaN,value=0
le dice que llene los NaN con cero yinplace=True
hará los cambios permanentes, sin tener que hacer una copia del objeto.fuente
el uso de la respuesta superior produce una advertencia sobre la realización de cambios en una copia de un segmento df Suponiendo que tiene otras columnas, una mejor manera de hacerlo es pasar un diccionario:
df.fillna({'A': 'NA', 'B': 'NA'}, inplace=True)
fuente
O algo como:
y si hay más:
fuente
Algunas veces esta sintaxis no funciona:
Use lo siguiente en su lugar:
fuente