我目前正在尝试将hampel过滤器应用到python中的数据帧中,我环顾了四周,没有太多关于它在python中实现的文档。我发现了一个帖子,但它看起来像是在实际的hampel软件包/函数出现之前创建的,有人创建了一个函数来进行滚动平均值计算,而不是使用软件包本身的过滤器,即使hampel软件包的站点也是最小的。我通过fips代码查看每天的新冠病毒病例数。我有470个时间序列(以天为单位)数据框,每列都是不同的FIPS代码,每行都有每天的新冠病毒病例数(带日期,而不是从开始的天数)。Hampel的软件包非常简单,它有两个输出选项,它要么返回一个它认为存在异常值的指数列表,要么用数据中的中位数替换异常值
[IN]:
ts = pd.Series([1, 2, 1 , 1 , 1, 2, 13, 2, 1, 2, 15, 1, 2])
[IN]:#要返回索引:
outlier_indices = hampel(ts, window_size=5, n=3)
print("Outlier Indices: ", outlier_indices)
[OUT]:
Outlier Indices: [6, 10]
[IN]:#要返回替换了滚动中间带的系列***我使用的是这种格式
ts_imputation = hampel(ts, window_size=5, n=3, imputation=True)
ts_imputation
[OUT]:
0 1.0
1 2.0
2 1.0
3 1.0
4 1.0
5 2.0
6 2.0
7 2.0
8 1.0
9 2.0
10 2.0
11 1.0
12 2.0
dtype: float64
因此,对于我的数据框,我希望它用列中位数替换每列中的异常值,我使用的窗口=21,阈值=6(数据设置的b/c)。我应该提到的是,每一列的行数都以不同的0开头。因此,例如,第一列前80行的值可能为0,第二列前95行的值可能为0,因为每个FIPs代码的天数不同,因此我尝试将.apply方法用于以下fx:
[IN]:
def hamp(col):
no_out = hampel(col, window_size=21, n=6, imputation=True)
return (no_out)
[IN]:
df = df.apply(hamp2, axis=1)
然而,当我打印数据帧时,我的数据帧现在都是0。有人能告诉我我做错了什么吗
谢谢大家!
目前没有回答
相关问题 更多 >
编程相关推荐