interpolate nan values

Linear interpolation for nan values between two existing values.

For leading / trailing nan values, they are forward / backward filled.


a = np.array([np.nan, 1,2,np.nan, 4, np.nan, 3, np.nan])


def interpolate_nans(array):

    nans = np.isnan(array)

    x = np.array(range(len(array)))

    array[nans] = np.interp(x=x[nans], xp=x[~nans], fp=array[~nans])

    return array

                            

interpolate_nans(a) 


[np.nan, 1,2,np.nan, 4, np.nan, 3, np.nan]  ---> [1. , 1. , 2. , 3. , 4. , 3.5, 3. , 3. ]