【发布时间】:2020-10-22 20:12:20
【问题描述】:
我正在尝试将算法从 MATLAB 转换为 Python。该算法适用于大型数据集,需要应用异常值检测和消除技术。
在 MATLAB 代码中,我使用的异常值删除技术是movmedian:
Outlier_T=isoutlier(Data_raw.Temperatura,'movmedian',3);
Data_raw(find(Outlier_T),:)=[]
通过在三值移动窗口的中心找到不成比例的值检测具有滚动中值的异常值。因此,如果我在第 3 行有一个 40 的列“Temperatura”,则会检测到它并删除整行。
Temperatura Date
1 24.72 2.3
2 25.76 4.6
3 40 7.0
4 25.31 9.3
5 26.21 15.6
6 26.59 17.9
... ... ...
据我了解,这是通过pandas.DataFrame.rolling 实现的。我看过几篇文章举例说明了它的使用,但我没有设法让它与我的代码一起工作:
尝试 A:
Dataframe.rolling(df["t_new"]))
尝试 B:
df-df.rolling(3).median().abs()>200
#基于@Ami Tavory 的answer
我在这里遗漏了什么明显的东西吗?这样做的正确方法是什么? 感谢您的宝贵时间。
【问题讨论】:
-
有一个错字。尝试用
median替换meadian -
对不起,我写了这个,但错字不在代码中
-
好的。谢谢。在下面发布了一个使用滚动中位数的答案。
标签: python pandas outliers rolling-computation