使用Python/Pandas仅插值时间序列的一个值

使用Python/Pandas仅插值时间序列的一个值,python,pandas,Python,Pandas,我有一个名为ts的pandas.core.series.TimeSeries如下: timestamp 2013-08-11 14:23:50 0.3219 2013-08-11 14:23:49 0.3222 2013-08-11 14:19:14 0.3305 2013-08-11 00:47:15 0.3400 2013-08-11 00:47:15.001 0.3310 2013-08-11 00:47:15.002 0

我有一个名为
ts
pandas.core.series.TimeSeries
如下:

timestamp
2013-08-11 14:23:50        0.3219
2013-08-11 14:23:49        0.3222
2013-08-11 14:19:14        0.3305
2013-08-11 00:47:15        0.3400
2013-08-11 00:47:15.001    0.3310
2013-08-11 00:47:15.002    0.3310
2013-08-10 22:38:15.003    0.3400
2013-08-10 22:38:14        0.3403
2013-08-10 22:38:13        0.3410
此时间序列的索引间隔不规则

我希望给定日期时间的值为
ts
,例如
2013-08-11 14:20:00

我只需要插值一个值,而不是整个时间序列


我只想使用一个线性函数在上一个索引(
2013-08-11 14:23:49
)和下一个索引(
2013-08-11 14:19:14
)之间插入数据。

取序列的子集,只包括目标上方和下方的条目。然后使用
插值

def interpolate(ts, target):
    ts1 = ts.sort_index()
    b = (ts1.index > target).argmax() # index of first entry after target
    s = ts1.iloc[b-1:b+1]
    # Insert empty value at target time.
    s = s.reindex(pd.to_datetime(list(s.index.values) + [pd.to_datetime(target)]))
    return s.interpolate('time').loc[target]
例如:

interpolate(ts, '2013-08-11 14:20:00')
2013-08-11 14:20:00    0.329112

谢谢你,丹·艾伦。恐怕我没有资格发表评论,但如果要求对ts索引中已经定义的时间进行插值,丹·艾伦的插值函数会引发一个例外。例如

s = pd.to_datetime('2015-08-26 00:00:00')
e = pd.to_datetime('2015-08-26 00:10:00')
ts=pd.Series([0,8000],index=[s,e])
interpolate(ts,pd.to_datetime('2015-08-26 00:00:00'))
我对上述内容的细微修改如下:

def interpolate(ts, target):
    if target in ts.index:
        return ts[target]
    ts1 = ts.sort_index()
    b = (ts1.index > target).argmax() # index of first entry after target
    s = ts1.iloc[b-1:b+1]
    # Insert empty value at target time.
    s = s.reindex(pd.to_datetime(list(s.index.values) + [pd.to_datetime(target)]))
    return s.interpolate(method='time').loc[target]

所以,为了让事情更清楚一点,对于不是在同一分钟内发生的每两个事件,您需要在第一个事件发生后的整分钟内进行插值?抱歉,假设索引没有重复的值(2013-08-11 00:47:15:0002013-08-11 00:47:15:0012013-08-11 00:47:15:002,2013-08-11 00:47:15:003)即使这样,一分钟内也有多个值:22:38有3个值。