熊猫插值“时间”与“线性”

时间:2019-03-04 15:01:59

标签: python pandas dataframe interpolation

Pandas interpolate function中,当时间索引等距分布时,method='time'等于method='linear'吗?

一个基本的例子表明是这种情况:

even_index = pd.date_range('2019-02-20 10:00 am', 
                           '2019-02-20 2:00 pm', freq='1 h')
values = [10, np.nan, 30, np.nan, 50]

pd.DataFrame(values, index=even_index).interpolate(method='time')

                        0
2019-02-20 10:00:00  10.0
2019-02-20 11:00:00  20.0
2019-02-20 12:00:00  30.0
2019-02-20 13:00:00  40.0
2019-02-20 14:00:00  50.0


pd.DataFrame(values, index=even_index).interpolate(method='linear')

                        0
2019-02-20 10:00:00  10.0
2019-02-20 11:00:00  20.0
2019-02-20 12:00:00  30.0
2019-02-20 13:00:00  40.0
2019-02-20 14:00:00  50.0

“时间”和“线性”之间的差异似乎只有在时间索引的间距不相等的情况下才会出现:

uneven_index = pd.to_datetime(['2019-02-20 10:00 am', 
               '2019-02-20 10:30 am', '2019-02-20 12:30 pm', 
               '2019-02-20 1:30 pm', '2019-02-20 2:00 pm'])


pd.DataFrame(values, index=uneven_index).interpolate(method='time')

                             0
2019-02-20 10:00:00  10.000000
2019-02-20 10:30:00  14.000000
2019-02-20 12:30:00  30.000000
2019-02-20 13:30:00  43.333333
2019-02-20 14:00:00  50.000000

pd.DataFrame(values, index=uneven_index).interpolate(method='linear')

                        0
2019-02-20 10:00:00  10.0
2019-02-20 10:30:00  20.0
2019-02-20 12:30:00  30.0
2019-02-20 13:30:00  40.0
2019-02-20 14:00:00  50.0

我的问题是这是否总是成立。可以假设在等距的时间索引下,method='time'将始终执行线性插值吗?

1 个答案:

答案 0 :(得分:1)

是的

从文档中:

  

“线性”:忽略索引,并将值等距对待

因此,如果索引的间距相等,并且您使用正确的方法(示例中的时间索引为'time'方法,但是对于数值索引等距的数值索引,它也可以为'index'方法),您的确会得到相同的结果。