我正在尝试创建以下函数。然而,当我将函数赋给原始数据帧时,它变成了空的。
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)发布于 2020-06-06 06:34:57
您面临的问题是变量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)]https://stackoverflow.com/questions/62224720
复制相似问题