我在我的数据上使用滚动平均值来平滑它。我的data
可以找到here。
目前,我正在使用
import pandas as pd
import numpy as np
data = pd.read_excel('data.xlsx')
data = np.array(data, dtype=np.float)
window_length = 9
res = pd.rolling_mean(np.array(data[:, 2]), window_length, min_periods=1, center=True)
这是我在应用window_length为9的滚动均值后得到的结果;
当我将window_length增加到20时,我得到一个更平滑的图像,但在边界处,数据似乎是错误的。
问题是,如上图所示,滚动平均值在我的数据边界引入了某种错误,这些错误在原始数据中不存在。
有没有办法纠正这个?
我的猜测是,在边界处,因为window_length
的一部分是在我的数据之外找到的,所以它夸大了平均值。
有没有办法使用pandas滚动平均值来纠正这个错误,还是有更好的pythonic方法呢?感谢。
聚苯乙烯。我知道我正在使用的滚动平均值的熊猫功能在新版本中已被弃用。
答案 0 :(得分:0)
您可以尝试使用权重scipy.ndimage.filters.convolve
等本机2D卷积方法,这样就可以使内核成为平均(平均)函数。
权重为:
n = 3. # size of kernel over which to calculate mean
weights = np.ones(n,n)/n**2
如果数据的白色区域由nans表示,这将减少n
结果的占用空间,因为包含nan的任何内核戳将返回nan。如果这确实是一个问题,请试试astropy.convolution,它有更好的纳米处理。