我有下面的函数,将删除离群值,但我想在同一列中用平均值替换它们
def remove_outlier(df_in, col_name):
q1 = df_in[col_name].quantile(0.25)
q3 = df_in[col_name].quantile(0.75)
iqr = q3-q1 #Interquartile range
fence_low = q1-1.5*iqr
fence_high = q3+1.5*iqr
df_out = df_in.loc[(df_in[col_name] > fence_low) & (df_in[col_name] < fence_high)]
return df_out
字符串
2条答案
按热度按时间jucafojl1#
让我们尝试一下。根据您的标准识别离群值,然后直接将列的平均值分配给那些不是离群值的记录。
一些测试数据:
字符串
我们可以检查填充值是否等于所有其他列值的平均值:
型
qmb5sa222#
很好的函数!然而,当我传递参数并运行它时,在
df_out.loc[outliers, col_name] = df_out.loc[~outliers, col_name].mean()
处发生以下错误。“FutureWarning:设置不兼容dtype的项已被弃用,并将在将来的pandas错误中引发。”
我只是把平均值传递给新变量
ave
,并把它赋给df_out.loc[outliers, col_name]
,然后它就可以工作了。字符串
我的pandas版本是2.1.0。