从熊猫DataFrame或系列插值到新的DatetimeIndex

时间:2019-08-31 17:14:31

标签: python pandas time-series interpolation

假设我有一个每小时的熊猫系列报道,可以很好地假设来源是定期的,但却是空洞的。如果我想将其插值到15分钟,则熊猫API提供resample(15min).interpolate('cubic')。它可以插值到新的时间,并可以控制插值的极限。样条曲线有助于完善系列并填补一些空白。具体来说:

tndx = pd.date_range(start="2019-01-01",end="2019-01-10",freq="H")    
tnum = np.arange(0.,len(tndx))
signal = np.cos(tnum*2.*np.pi/24.)

signal[80:85] = np.nan   # too wide a gap
signal[160:168:2] = np.nan   # these can be interpolated

df = pd.DataFrame({"signal":signal},index=tndx)    
df1= df.resample('15min').interpolate('cubic',limit=9)

现在让我们说我的日期时间索引不规则。在下面的示例中,第一次是常规时间点,第二次是较大的时间间隔,最后一次是散布的短暂时间间隔。

tndx2 = pd.DatetimeIndex('2019-01-04 00:00','2019-01-04 10:17','2019-01-07 16:00')

如何从原始序列(每小时)到这个不规则的时间序列进行插值?

构建包含原始数据和目标数据的系列的唯一选择是吗?我该怎么做?实现插值到独立的不规则索引并施加缺口限制的最经济的方法是什么?

2 个答案:

答案 0 :(得分:0)

在时间戳不规则的情况下,首先将datetime设置为索引,然后可以将interpolate方法用于index df1= df.resample('15min').interpolate('index')

您可以在这里https://pandas.pydata.org/pandas-docs/version/0.16.2/generated/pandas.DataFrame.interpolate.html

中找到更多信息

答案 1 :(得分:0)

这是pandas插值API中的示例解决方案,它似乎没有办法使用横坐标和源序列中的值作为单独的数据结构插值到目标索引提供的新时间。此方法通过将目标附加到源来解决此问题。该方法利用了limit的{​​{1}}参数,并且可以使用该API中的任何插值算法,但这并不完美,因为限制是根据值的数量以及是否存在NaN补丁中有很多目的地点,这些目的地点也被计算在内。

df.interpolate