函数替换Python中的异常值

函数替换Python中的异常值,python,Python,我需要创建一个函数,用该列的平均值+/-3*标准偏差替换数据集中列中的异常值 例如,如果值大于/小于平均值+/-3*标准偏差,则识别异常值 因此,如果A中的值(比如285)是上侧的异常值,则需要用平均值+3*标准偏差替换。如果异常值位于较低的一侧,则需要用平均值-3*标准偏差替换 这需要对所有列执行 A、B、C 195 106 70 250 121 81 245 127 80 225 150 95 28513084 228 180 110 205 138 71您可以借助map方法,该方法在内部由

我需要创建一个函数,用该列的平均值+/-3*标准偏差替换数据集中列中的异常值

例如,如果值大于/小于平均值+/-3*标准偏差,则识别异常值

因此,如果A中的值(比如285)是上侧的异常值,则需要用平均值+3*标准偏差替换。如果异常值位于较低的一侧,则需要用平均值-3*标准偏差替换

这需要对所有列执行

A、B、C

195 106 70

250 121 81

245 127 80

225 150 95

28513084

228 180 110


205 138 71

您可以借助
map
方法,该方法在内部由每行的每个元素调用,并进一步检查val是否为异常值。下面可以编写类似的代码

def replace_outlier(val, mean, std):
    if val > mean + 3*std:
        return mean + 3*std 
    elif val < mean - 3*std:
        return mean - 3*std
    return val

for col in df.columns:
    mean = df[col].mean()
    std_dev = df[col].std(axis=0)
    df[col] = df[col].map(lambda x: replace_outlier(x, mean, std_dev))
def替换_异常值(val、平均值、标准值):
如果val>平均值+3*std:
返回平均值+3*std
elif val<平均值-3*std:
返回平均值-3*std
返回值
对于df.列中的列:
mean=df[col].mean()
std_dev=df[col].std(轴=0)
df[col]=df[col].map(λx:替换异常值(x,平均值,标准偏差))

您可以借助
map
方法,该方法在内部由每行的每个元素调用,并进一步检查val是否为异常值。下面可以编写类似的代码

def replace_outlier(val, mean, std):
    if val > mean + 3*std:
        return mean + 3*std 
    elif val < mean - 3*std:
        return mean - 3*std
    return val

for col in df.columns:
    mean = df[col].mean()
    std_dev = df[col].std(axis=0)
    df[col] = df[col].map(lambda x: replace_outlier(x, mean, std_dev))
def替换_异常值(val、平均值、标准值):
如果val>平均值+3*std:
返回平均值+3*std
elif val<平均值-3*std:
返回平均值-3*std
返回值
对于df.列中的列:
mean=df[col].mean()
std_dev=df[col].std(轴=0)
df[col]=df[col].map(λx:替换异常值(x,平均值,标准偏差))

看一看。理想情况下,当数据是高斯分布时,应该只使用标准偏差。若你们的数据不是正态分布,那个么标准偏差可能无法找到异常值。使用四分位规则查找离群值。理想情况下,仅当数据为高斯分布时,才应使用标准偏差。若你们的数据不是正态分布,那个么标准偏差可能无法找到异常值。查找异常值的用户四分位规则显示该函数是否可用于数据框中的所有列?我正在数据框中的所有列上运行for循环。对于数据框中的每一列,它将运行
replace\u outlier(…)
方法。该函数如何用于数据框中的所有列?我正在数据框中的所有列上运行For循环。对于数据帧中的每一列,它将运行
replace\u outlier(…)
方法。