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

wil*_*llk 8 python interpolation dataframe pandas

Pandasinterpolate函数中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
Run Code Online (Sandbox Code Playgroud)

'time' 和 'linear' 之间的差异似乎只有在时间索引不等距时才会出现:

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
Run Code Online (Sandbox Code Playgroud)

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

Rom*_*ldM 5

是的

\n\n

从文档中:

\n\n
\n

\xe2\x80\x98线性\xe2\x80\x99:忽略索引并将值视为等距

\n
\n\n

因此,如果您的索引是等距的并且您使用正确的方法(示例中时间索引的“time”方法,但也可能是具有等距值的数字索引的“index”方法),您确实会得到相同的结果。

\n

  • 谢谢,我已经在文档中阅读了这一点,这就是我的示例所显示的内容。我只是想向了解库内部结构的人确认一下等间隔的“时间”是否完全等同于“线性”。这并不能绝对回答问题。 (3认同)