我正在尝试创建以下功能。但是,当我将功能分配给原始数据框时,它变为空。
def remove_outliers(feature, df):
q1 = np.percentile(df[feature], 25)
q2 = np.percentile(df[feature], 50)
q3 = np.percentile(df[feature], 75)
iqr = q3-q1
lower_whisker = df[df[feature] <= q1-1.5*iqr][feature].max()
upper_whisker = df[df[feature] <= q3+1.5*iqr][feature].max()
return df[(df[feature] < upper_whisker) & (df[feature]>lower_whisker)]
我分配如下:
train = remove_outliers('Power',train)
您面临的问题是变量lower_whisker
和/或upper_whisker
设置为,NaN
因此该函数的结果为空的DataFrame。您只需检查这些结果即可解决此问题,然后返回所需的结果。
在下面,您可以看到重写函数以解决此问题的可能方法:
def remove_outliers(feature, df):
q1 = np.percentile(df[feature], 25)
q2 = np.percentile(df[feature], 50)
q3 = np.percentile(df[feature], 75)
iqr = q3-q1
lower_whisker = df[df[feature] <= q1-1.5*iqr][feature].max()
upper_whisker = df[df[feature] <= q3+1.5*iqr][feature].max()
if lower_whisker is np.nan:
return df[(df[feature]>lower_whisker)]
elif upper_whisker is np.nan:
return df[(df[feature] < upper_whisker)]
else:
return df[(df[feature] < upper_whisker) & (df[feature]>lower_whisker)]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句