检测并排除数据帧中的异常值

我有一个熊猫数据框,几乎没有列

现在我知道某些行是基于特定列值的异常值

比如说

“Vol”列的所有值都在12xx附近,其中一个值为4000(异常值)

现在,我想排除那些像这样有Vol列的行

所以,本质上我需要在数据框上放置一个过滤器,这样我们就可以选择所有行,其中某一列的值在,比如说,平均值的3个标准偏差之内

实现这一目标的优雅方式是什么

如果您的数据帧中有多个列,并且希望删除至少一列中包含异常值的所有行,则以下表达式可以一次性完成此操作。

df=pd.DataFrame(np.random.randn(100,3))
从scipy导入统计信息
df[(np.abs(stats.zscore(df))<3).all(axis=1)]

说明:

  • 对于每个列,它首先计算
    柱,相对于柱平均值和标准偏差
  • 然后它会得到绝对的Z分数,因为方向不是
    只有当它低于临界值时,它才是重要的
  • all(axis=1)确保每行的所有列都满足
    约束
  • 最后,使用此条件的结果对数据帧进行索引

基于单个列筛选其他列

  • 例如,为zscoredf[0]指定一列,然后删除.all(axis=1)
df[(np.abs(stats.zscore(df[0]))<3)]

发表评论