2015-05-20 10 views
22

Vorrei riempire il valore mancante in una colonna con il valore di un'altra colonna.Panda - FillNa con un'altra colonna

Ho letto che passare da una riga all'altra sarebbe una pessima pratica e che sarebbe stato meglio fare tutto in una volta sola, ma non sono riuscito a scoprire come farlo con il metodo fillna.

dati Prima

Day Cat1 Cat2 
1 cat mouse 
2 dog elephant 
3 cat giraf 
4 NaN ant 

dati dopo

Day Cat1 Cat2 
1 cat mouse 
2 dog elephant 
3 cat giraf 
4 ant ant 

risposta

45

È possibile fornire questa colonna per fillna (vedi docs), userà quei valori sui corrispondenti indici di riempire:

In [17]: df['Cat1'].fillna(df['Cat2']) 
Out[17]: 
0 cat 
1 dog 
2 cat 
3 ant 
Name: Cat1, dtype: object 
Non
+0

Bello! Non sapevo che '' fillna'' prende una serie. –

+0

Grazie! Pensavo che la serie dovesse essere la dimensione esatta del numero di valori di NA. – xav

4

si potrebbe fare

df.Cat1 = np.where(df.Cat1.isnull(), df.Cat2, df.Cat1) 

Il costrutto complessivo sul RHS utilizza the ternary pattern from the pandas cookbook (che vale la pena di leggere in ogni caso) . È una versione vettoriale di a? b: c.

+0

la soluzione che ho usato per questo problema, ma modello molto interessante! Grazie! – xav

4

Basta utilizzare il parametro invece di methodvalue:

In [20]: df 
Out[20]: 
    Cat1  Cat2 Day 
0 cat  mouse 1 
1 dog elephant 2 
2 cat  giraf 3 
3 NaN  ant 4 

In [21]: df.Cat1 = df.Cat1.fillna(value=df.Cat2) 

In [22]: df 
Out[22]: 
    Cat1  Cat2 Day 
0 cat  mouse 1 
1 dog elephant 2 
2 cat  giraf 3 
3 ant  ant 4 
+0

Grazie per la risposta! Cosa cambia per usare il valore piuttosto che il metodo descritto da joris? – xav

+0

@xav 'value' è il primo parametro, quindi joris sta facendo esattamente la stessa cosa. Come ha detto, vedi i [documenti] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.fillna.html). – chrisaycock

+0

Sì, la docstring è un po 'fuorviante in quanto 'method' è elencato qui per primo. – joris

Problemi correlati