我有一个名为数据2数据帧,其由583观察和11个变量。有数据提供的异常值。我想我的推诿名为,B和C 3个变量的异常值。都是Int64的类型。使用IQR和平均值估算technique.I从我的数据2 Q1和Q3创建了两个变量。
Q1 = data2[['a','b','c']].quantile(0.25)
Q3 = data2[['a','b','c']].quantile(0.75)
IQR = Q3 - Q1
print (IQR)
然后,我定义了两个变量,即和LOWER_LIMIT UPPER_LIMIT。
lower_limit = Q1 - 1.5 * IQR
upper_limit = Q3 + 1.5 * IQR
然后我发现A,B和C的平均值。
mean_value = data2[['a','b','c']].mean()
print(mean_value)
然后,我创建了一个功能。
def imputer(value):
if value < lower_limit or value > upper_limit:
return mean_value
else:
return value
现在,当我想用我以前创建转嫁给功能把值代入数据帧。
results = data2[['a','b','c']].apply(imputer) #Error Line
它让我错误说ValueError异常:“只能比较相同标记系列的对象。
任何人的帮助表示赞赏。
我试图通过改变axis
apply
方法的属性来做到这一点,我还检查Series'
where方法,但无济于事。毕竟这是我想出的是,不要用你的imputer方法
for col in ['a', 'b', 'c']:
data2[col] = data2.apply(lambda row: mean_value[col] if (row[col] < lower_limit[col] and row[col] > upper_limit[col]) else row[col], axis=1)
我知道这可能是无效率的,但如果任何人有一个有效的答案,或者你正在做的方式,则可以是巨大的。