Cómo pasar otra columna completa como argumento a pandas fillna()

Resuelto xav asked hace 9 años • 7 respuestas

Me gustaría completar los valores faltantes en una columna con valores de otra columna, usando fillnael método.

(Leí que recorrer cada fila sería una muy mala práctica y que sería mejor hacer todo de una vez, pero no pude descubrir cómo hacerlo fillna).

Datos antes:

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

Datos después:

Day  Cat1  Cat2
1    cat   mouse
2    dog   elephant
3    cat   giraf
4    ant   ant
xav avatar May 21 '15 01:05 xav
Aceptado

Puede proporcionar esta columna fillna(ver documentos ), utilizará esos valores en índices coincidentes para completar:

In [17]: df['Cat1'].fillna(df['Cat2'])
Out[17]:
0    cat
1    dog
2    cat
3    ant
Name: Cat1, dtype: object
joris avatar May 20 '2015 18:05 joris

Podrías hacerlo

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

La construcción general del RHS utiliza el patrón ternario del pandaslibro de cocina (que vale la pena leer en cualquier caso). Es una versión vectorial de a? b: c.

Ami Tavory avatar May 20 '2015 18:05 Ami Tavory

Simplemente use el valueparámetro en lugar de method:

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
chrisaycock avatar May 20 '2015 18:05 chrisaycock