method filling bfill python python-2.7 pandas dataframe pandas-fillna

python - filling - pd fillna method



Marco de datos de pandas fillna() solo algunas columnas en su lugar (6)

Así es como puedes hacerlo todo en una línea:

df[[''a'', ''b'']].fillna(value=0, inplace=True)

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, e inplace=True hará los cambios permanentes, sin tener que hacer Una copia del objeto.

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 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?


O algo como:

df.loc[df[''a''].isnull(),''a'']=0 df.loc[df[''b''].isnull(),''b'']=0

y si hay más:

for i in your_list: df.loc[df[i].isnull(),i]=0


Puede evitar hacer una copia del objeto utilizando 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


Puede seleccionar sus columnas deseadas y hacerlo por asignación:

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


Puede 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 de nuevo

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


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)