如何解决创建一个自定义转换器,用于删除 Python 中的异常值
我有一个包含大约 300,000 行和 35 列的大型数据集。我正在尝试使用自定义转换器删除异常值,然后将其与管道一起使用。这是测试 df:
test = pd.DataFrame({'a':[100,200,250,140,800],'b':[0,1,2,1],'c':[-20,18]})
a b c
0 100 0 -20
1 200 0 0
2 250 1 1
3 140 2 2
4 800 1 18
这是我的自定义转换器:
from sklearn.base import BaseEstimator,TransformerMixin
class OutlierRemover(BaseEstimator,TransformerMixin):
def __init__(self,factor=1.5):
self.factor = factor
def outliers_iqr(self,X,y=None):
X = pd.Series(X).copy()
q1 = X.quantile(0.25)
q3 = X.quantile(0.75)
iqr = q3 - q1
lower_bound = q1 - (iqr * self.factor)
upper_bound = q3 + (iqr * self.factor)
# filter only those rows that are greater than lower_bound and less than upper_bound,#i.e. drop values outside the given interval
X.loc[((X >= lower_bound) | (X <= upper_bound))]
return pd.Series(X)
def fit(self,y=None):
return self
def transform(self,X):
return X.apply(self.outliers_iqr)
remover = OutlierRemover()
remover.fit(test)
remover.fit_transform(test)
当我将该函数应用于 df 时,它什么都不做并返回相同的数据。我想要的输出是没有第 0 行和第 4 行的 df,因为它们包含异常值。
a b c
1 200 0 0
2 250 1 1
3 140 2 2
有人能指出我的错误并提出正确的方法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。