Pandas: interpolación donde el primer y último punto de datos en la columna es NaN

Me gustaría usar la función de interpolar, pero solo entre valores de datos conocidos en una columna de dataframe de pandas. El problema es que los primeros y últimos valores de la columna suelen ser NaN y, a veces, pueden pasar muchas filas antes de que un valor no sea NaN:

col 1 col 2 0 NaN NaN 1 NaN NaN ... 1000 1 NaN 1001 NaN 1 <----- 1002 3 NaN <----- only want to fill in these 'in between value' rows 1003 4 3 ... 3999 NaN NaN 4000 NaN NaN 

Estoy enlazando un conjunto de datos que se actualiza ‘en el evento’ pero por separado para cada columna, y se indexa a través de la marca de tiempo. Esto significa que a menudo hay filas donde no se registran datos para algunas columnas, ¡por lo tanto, una gran cantidad de NaNs!

Selecciono por valor min y max de columna por función idxmin e idxmax y uso la función fillna con el método de llenado directo.

 print df # col 1 col 2 #0 NaN NaN #1 NaN NaN #1000 1 NaN #1001 NaN 1 #1002 3 NaN #1003 4 3 #3999 NaN NaN #4000 NaN NaN df.loc[df['col 1'].idxmin(): df['col 1'].idxmax()] = df.loc[df['col 1'].idxmin(): df['col 1'].idxmax()].fillna(method='ffill') df.loc[df['col 2'].idxmin(): df['col 2'].idxmax()] = df.loc[df['col 2'].idxmin(): df['col 2'].idxmax()].fillna(method='ffill') print df # col 1 col 2 #0 NaN NaN #1 NaN NaN #1000 1 NaN #1001 1 1 #1002 3 1 #1003 4 3 #3999 NaN NaN #4000 NaN NaN 

Añadida solución diferente, gracias HStro .

 df['col 1'].loc[df['col 1'].first_valid_index() : df['col 1'].last_valid_index()] = df['col 1'].loc[df['col 1'].first_valid_index(): df['col 1'].last_valid_index()].astype(float).interpolate()