Domanda Pandas dataframe fillna () solo alcune colonne sul posto


Sto cercando di riempire nessun valore in un dataframe di Pandas con 0 per solo alcuni sottoinsiemi di colonne.

Quando io faccio:

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

Il risultato:

     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

Sostituisce ogni None con 0'S. Quello che voglio fare è, solo sostituire Nones in colonne a e b, ma no c.

Qual è il modo migliore per fare questo?


44
2018-06-30 22:06


origine


risposte:


Puoi selezionare le colonne desiderate e farlo per incarico:

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

L'output risultante è come previsto:

     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

73
2018-06-30 22:09



Puoi usare dict , fillna con un valore diverso per colonna diversa

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

Dopo averlo restituito

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

23
2017-11-15 18:59



Puoi evitare di creare una copia dell'oggetto usando la soluzione di Wen e inplace = True:

df.fillna({'a':0, 'b':0}, inplace=True)
print(df)

Quale produce:

     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

2
2018-06-10 02:22