Search code examples
pythonpandas

pandas interpolate only when values exist on both sides


consider pd.Series s

import pandas as pd
import numpy as np

s = pd.Series([np.nan, 1, np.nan, 3, np.nan])

How do I interpolate to get:

pd.Series([np.nan, 1, 2, 3, np.nan])

0    NaN
1    1.0
2    2.0
3    3.0
4    NaN
dtype: float64

note: I want the first and last np.nan to remain

I only want to fill in values when I have values on both sides to do the the interpolation.

In other words, I want to interpolate, not extrapolate.


Solution

  • I do this - skipping the heading and tailing NAs:

    s.iloc[s.first_valid_index():s.last_valid_index()+1].interpolate()