Respostas:
fillnapreenche os NaNvalores com um determinado número pelo qual você deseja substituir. Ele oferece a opção de preencher de acordo com o índice de linhas de pd.DataFrameou no nome das colunas na forma de um python dict.
Mas interpolateé um deus no preenchimento. Ele oferece a flexibilidade de preencher os valores ausentes com muitos tipos de interpolações entre os valores como linear (que fillnanão fornece) no exemplo fornecido abaixo e muitas outras interpolações possíveis. Por exemplo
>> import pandas as pd, numpy as np
>> df = pd.Series([1, np.nan, np.nan, 3])
>> df.interpolate()
0 1.000000
1 1.666667
2 2.333333
3 3.000000
dtype: float64
A documentação do Pandas sobre fillna e interpolar é muito clara sobre isso.