El método fillna permite sustituir los valores nulos de una estructura pandas por otro valor según ciertos criterios: pueden sustituirse por un valor concreto o bien puede utilizarse el anterior o posterior valor no nulo (en el caso de los dataframes habrá que especificar el eje sobre el que queremos aplicar la función).
Veamos el caso de ejecutar este método en una serie (pandas.Series.fillna):
Hemos indicado el valor 0 como argumento, y es este valor el que se utiliza para sustituir los valores nulos de la serie original.
También podríamos haber especificado que el método a utilizar fuese, por ejemplo, el "forward fill" ("ffill"), de forma que los valores no nulos se copien "hacia adelante" siempre que se encuentren valores nulos. Esto se indicaría con el parámetro method:
Vemos cómo los valores nulos se han rellenado con el anterior valor no nulo (o, dicho con otras palabras, cómo los valores no nulos se han extendido hacia adelante).
Si especificamos el método "backward fill" ("bfill"):
...los valores nulos se han rellenado con el siguiente valor no nulo.
En el caso de los dataframes (pandas.DataFrame.fillna), la funcionalidad es semejante. Como se ha comentado, la mayor diferencia consiste en que, en el caso de querer rellenar los valores nulos con el anterior o posterior no nulo, habrá que indicar el eje del que obtener estos datos.
Veamos un ejemplo práctico. Si partimos de este dataframe:
...podemos sustituir los valores nulos por una cifra concreta:
Si aplicamos el método de "forward fill" a lo largo del eje 0 (eje por defecto):
...vemos cómo el primer valor de la columna D no se ha modificado pues no hay ningún valor anterior (en el eje 0) del que tomar el valor.
Y si aplicamos el método "backward fill" a lo largo del eje 1:
...vemos que, también en este caso, el valor de la columna D correspondiente a enero no se ha modificado pues, nuevamente, no hay un valor posterior (en el eje 1) del que tomar el valor.
En un caso práctico puede resultar recomendable utilizar "lógica de relleno" seguida de la asignación de un valor por defecto para los valores nulos que puedan seguir existiendo, para asegurarnos de que todos ellos han sido sustituidos adecuadamente: