熊猫插值不适用于某些方法

时间:2018-06-29 16:26:37

标签: python pandas scipy interpolation

我有一个像这样的数据框:

[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

我正在尝试对它进行插值。我发现基本的熊猫方法可以正常工作(例如timelinear),但是如果我尝试使用scipy或{{1}之类的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  

要让scipy插值方法起作用,还需要做其他事情吗?

编辑:这是我正在处理的文件:link

此外,这是我的玩具脚本,上面的CSV失败:

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')

如果我更改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')) scipy`版本,它将失败。

这也是我的玩具盒,它无法显示真实数据:

1 个答案:

答案 0 :(得分:2)

给出示例数据(用DatetimeIndex格式化),所有可用的方法似乎都适用于熊猫0.22.0:

                                      0       1
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

df.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 5 entries, 2018-02-01 00:00:00 to 2018-02-01 02:00:00
Data columns (total 2 columns):
0    5 non-null datetime64[ns]
1    4 non-null float64
dtypes: datetime64[ns](1), float64(1)
memory usage: 120.0 bytes

methods = ['linear', 'time', 'index', 'values', 'nearest', 'zero',
           'slinear', 'quadratic', 'cubic', 'barycentric', 'krogh', 
           'piecewise_polynomial', 'from_derivatives', 'pchip', 'akima']

for method in methods:
    print(method)
    print(df.interpolate(limit_direction='both', method=method))

linear
                                      0       1
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  368.28
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
                                      0       1
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  368.28
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
index
                                      0       1
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  368.28
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
values
                                      0       1
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  368.28
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
nearest
                                      0       1
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  435.24
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
zero
                                      0       1
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  435.24
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
slinear
                                      0       1
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  368.28
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
quadratic
                                      0           1
2018-02-01 00:00:00 2018-02-01 00:00:00  435.240000
2018-02-01 00:30:00 2018-02-01 00:30:00  361.818947
2018-02-01 01:00:00 2018-02-01 01:00:00  301.320000
2018-02-01 01:30:00 2018-02-01 01:30:00  256.680000
2018-02-01 02:00:00 2018-02-01 02:00:00  245.520000
cubic
                                      0       1
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  365.49
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
barycentric
                                      0       1
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  245.52
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
krogh
                                      0       1
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  365.49
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
piecewise_polynomial
                                      0       1
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  368.28
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
from_derivatives
                                      0       1
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  368.28
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
pchip
                                      0          1
2018-02-01 00:00:00 2018-02-01 00:00:00  435.24000
2018-02-01 00:30:00 2018-02-01 00:30:00  360.92087
2018-02-01 01:00:00 2018-02-01 01:00:00  301.32000
2018-02-01 01:30:00 2018-02-01 01:30:00  256.68000
2018-02-01 02:00:00 2018-02-01 02:00:00  245.52000
akima
                                      0             1
2018-02-01 00:00:00 2018-02-01 00:00:00  4.352400e+02
2018-02-01 00:30:00 2018-02-01 00:30:00 -5.045003e+07
2018-02-01 01:00:00 2018-02-01 01:00:00  3.013200e+02
2018-02-01 01:30:00 2018-02-01 01:30:00  2.566800e+02
2018-02-01 02:00:00 2018-02-01 02:00:00  2.455200e+02