Python大熊猫时间序列插值和正则化

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)

有几个问题:

  • 对于某些时间戳,缺少数据(-1)
  • 缺少参赛作品(也是连续2/3小时)
  • 观察的频率不是5分钟,但实际上偶尔会丢失几秒钟

我想获得一个固定的时间序列,所以每隔(完全)5分钟(并且没有丢失的价值)的条目.我已成功使用以下代码插入时间序列,以使用此代码逼近-1值:

ts = pd.TimeSeries(values, index=timestamps)
ts.interpolate(method='cubic', downcast='infer')
Run Code Online (Sandbox Code Playgroud)

我怎样才能插入和规范观测的频率?谢谢大家的帮助.

unu*_*tbu 24

-1s 更改为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)

在此输入图像描述

  • @DaveX:当然可以.而不是"重新采样"系列,使用[`reindex`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.reindex.html)添加带有NaN的新行`价值观.然后调用`Series.interpolate(method ='time')`将用插值来填充缺失值. (2认同)
  • 或者你可以使用`combine_first`作为[HYRY在这里显示](/sf/answers/1664080001/).(正如我想的那样,`combine_first`可能是更好的解决方案,因为你不必像使用`reindex`那样将旧索引与新索引联合起来.) (2认同)