У меня есть такой фрейм данных:
[5232 rows x 2 columns]
0 2
0
2018-02-01 00:00:00 2018-02-01 00:00:00 435.24
2018-02-01 00:30:00 2018-02-01 00:30:00 NaN
2018-02-01 01:00:00 2018-02-01 01:00:00 301.32
2018-02-01 01:30:00 2018-02-01 01:30:00 256.68
2018-02-01 02:00:00 2018-02-01 02:00:00 245.52
И я пытаюсь это интерполировать. Я обнаружил, что методы базовой панды работают нормально (например, time
или linear
), но если я попытаюсь использовать метод scipy
, такой как krogh
или barycentric
, я обнаружу, что интерполяция не появляется для интерполяции точек:
0 2
0
2018-02-01 00:00:00 2018-02-01 00:00:00 435.24
2018-02-01 00:30:00 2018-02-01 00:30:00 NaN
2018-02-01 01:00:00 2018-02-01 01:00:00 301.32
2018-02-01 01:30:00 2018-02-01 01:30:00 256.68
2018-02-01 02:00:00 2018-02-01 02:00:00 245.52
Мой метод интерполяции следующий:
def interpolate(df : DataFrame, interpolate_type : str = 'pandas'):
""" Helper method for inserting different interpolation methods into the main function. """
if interpolate_type == 'pandas':
return df.interpolate(limit_direction='both', method='time')
if interpolate_type == 'krogh':
return df.interpolate(limit_direction='both', method='krogh')
Есть ли что-то еще, что вам нужно сделать, чтобы заставить работать методы scipy интерполяции?
Редактировать: вот файл, над которым я работаю: ссылка
Кроме того, вот мой игрушечный скрипт, который не работает с вышеуказанным CSV:
df_2[2] = pd.to_numeric(df_2[2],errors='force')
df_2 = df_2.set_index(pd.DatetimeIndex(df_2[0])) # Increases interpolation accuracy.
df_2.index = pd.to_datetime(df_2.index)
df_2.iloc[1, 2] = np.NaN
df_2.sort_index(inplace=True)
print(df_2.interpolate(limit_direction='both', method='krogh'))
Если я изменю версию interpolate function to any
scipy`, она не будет выполнена.
Также вот мой игрушечный чехол, который не работает на реальных данных: