.fillna() method also has a nice argumnet limit, which, we can set equal to an integer, which helps us limit the amount of filling we want to do, depending on whether we are doing forward or backward filling.
This employs more sophisticated filling.
For example, it fills according to averages of surrounding existing values to missing values.
Additional arguments can be used, like method="time", to take into account available date data to compute best interpolation.
dropna() can take arguments, for how you might want to decide to drop a row.