ric*_*ini 16 python interpolation time-series pandas regularized
我是第一次使用Python Pandas.我有csv格式的5分钟滞后流量数据:
...
2015-01-04 08:29:05,271238
2015-01-04 08:34:05,329285
2015-01-04 08:39:05,-1
2015-01-04 08:44:05,260260
2015-01-04 08:49:05,263711
...
Run Code Online (Sandbox Code Playgroud)
有几个问题:
我想获得一个固定的时间序列,所以每隔(完全)5分钟(并且没有丢失的价值)的条目.我已成功使用以下代码插入时间序列,以使用此代码逼近-1值:
ts = pd.TimeSeries(values, index=timestamps)
ts.interpolate(method='cubic', downcast='infer')
Run Code Online (Sandbox Code Playgroud)
我怎样才能插入和规范观测的频率?谢谢大家的帮助.
unu*_*tbu 24
将-1
s 更改为NaN:
ts[ts==-1] = np.nan
Run Code Online (Sandbox Code Playgroud)
然后重新采样数据,使其频率为5分钟.
ts = ts.resample('5T')
Run Code Online (Sandbox Code Playgroud)
请注意,默认情况下,如果两次测量属于同一个5分钟时段,resample
则将这些值平均在一起.
最后,您可以根据时间线性插值时间序列:
ts = ts.interpolate(method='time')
Run Code Online (Sandbox Code Playgroud)
由于您的数据看起来已经有大约5分钟的频率,因此您可能需要以较短的频率重新采样,因此三次或样条插值可以平滑曲线:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
values = [271238, 329285, -1, 260260, 263711]
timestamps = pd.to_datetime(['2015-01-04 08:29:05',
'2015-01-04 08:34:05',
'2015-01-04 08:39:05',
'2015-01-04 08:44:05',
'2015-01-04 08:49:05'])
ts = pd.Series(values, index=timestamps)
ts[ts==-1] = np.nan
ts = ts.resample('T').mean()
ts.interpolate(method='spline', order=3).plot()
ts.interpolate(method='time').plot()
lines, labels = plt.gca().get_legend_handles_labels()
labels = ['spline', 'time']
plt.legend(lines, labels, loc='best')
plt.show()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16107 次 |
最近记录: |