在python中将hampel过滤器应用于df

2024-09-24 22:30:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试将hampel过滤器应用到python中的数据帧中,我环顾了四周,没有太多关于它在python中实现的文档。我发现了一个帖子,但它看起来像是在实际的hampel软件包/函数出现之前创建的,有人创建了一个函数来进行滚动平均值计算,而不是使用软件包本身的过滤器,即使hampel软件包的站点也是最小的。我通过fips代码查看每天的新冠病毒病例数。我有470个时间序列(以天为单位)数据框,每列都是不同的FIPS代码,每行都有每天的新冠病毒病例数(带日期,而不是从开始的天数)。Hampel的软件包非常简单,它有两个输出选项,它要么返回一个它认为存在异常值的指数列表,要么用数据中的中位数替换异常值

  • 使用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。有人能告诉我我做错了什么吗

谢谢大家!


Tags: 数据函数代码in过滤器sizewindow病毒