【发布时间】:2017-03-29 02:42:27
【问题描述】:
我有一个带有 speed 列的 Pandas 数据框,其中偶尔会出现噪音(数据来自 Garmin,表示运行期间捕获的数据)。
我试图找到一种方法来平均相邻点,但是当我遇到这样的事情时
9.112273445
164.5779550738
84.4553498412
4.231089359
4.3740439706
我陷入了无限循环。
我的算法比较幼稚:
# Get list of indices in which value is great than 6:
idx = z[(z['speed']>=6)].index
while list(idx) != []:
for i in idx:
# check if out of bounds
if i + 1 >= len(z):
z.iloc[i, z.columns.get_indexer(['speed'])] = (z['speed'].ix[i-2] + z['speed'].ix[i-1])/2
elif i - 1 < 0:
z.iloc[i, z.columns.get_indexer(['speed'])] = (z['speed'].ix[i+1] + z['speed'].ix[i+2])/2
else:
z.iloc[i, z.columns.get_indexer(['speed'])] = (z['speed'].ix[i-1] + z['speed'].ix[i+1])/2
idx = z[(z['speed']>=6)].index
当然,问题是当我有两个非常大的相邻值时,这会陷入无限循环。
我正在应用这个过滤器(使用汉宁窗)来消除随机噪声:SciPy Cookbook SignalSmooth,但它没有处理数据中的这些大峰值。
除了丢弃它们,或者将它们设置为常数值,还有其他简单的方法来处理它们吗?
编辑
我正在测试的值是:
0 NaN
1 3.508394
2 5.097879
3 7.743824
4 9.138245
5 13.315918
6 12.836310
7 12.001393
8 15.815223
9 0.000000
10 16.622944
11 9.061864
12 2.089729
13 2.710874
Name: speed, dtype: float64
【问题讨论】: