【问题标题】:Function to replace outliers in PythonPython中替换异常值的函数
【发布时间】:2020-08-10 07:45:36
【问题描述】:

我需要创建一个函数来用该列的 Mean+/- 3* StandardDeviation 替换我的数据集列中的异常值

例如,如果值大于/小于 Mean+/- 3* StandardDeviation,则会识别异常值。

因此,如果 A 中的值假设 285 是上侧的异常值,则需要将其替换为 Mean+ 3* StandardDeviation。如果离群值在较低的一侧,则需要将其替换为 Mean - 3* StandardDeviation。

这需要对所有列进行。

A B C

195 106 70

250 121 81

245 127 80

225 150 95

285 130 84

228 180 110

205 138 71

【问题讨论】:

  • 看看numpy.clip
  • 理想情况下,您应该只在数据为高斯分布时才使用标准差。如果您的数据不是正态分布的,那么标准差可能无法找到异常值。用户四分位规则找出异常值

标签: python


【解决方案1】:

您可以借助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))

【讨论】:

  • 数据框中的所有列如何使用该函数?
  • 我正在对数据框中的所有列运行 for 循环。对于数据框中的每一列,它将运行replace_outlier(...) 方法。
猜你喜欢
  • 2018-01-05
  • 2019-02-18
  • 2020-07-21
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 2021-09-16
相关资源
最近更新 更多