检测和排除 pandas DataFrame 中的异常值

新手上路,请多包涵

我有一个包含几列的熊猫数据框。

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

例如

“Vol”列的所有值都围绕着 12xx 并且一个值是 4000 (异常值)。

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

因此,基本上我需要在数据框上放置一个过滤器,以便我们选择某一列的值在平均值范围内的所有行,例如,3 个标准偏差。

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

原文由 AMM 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
1 个回答

如果您的数据框中有多个列,并且想要删除至少在一列中具有异常值的所有行,则以下表达式可以一次完成。

 df = pd.DataFrame(np.random.randn(100, 3))

import numpy as np
from scipy import stats
df[(np.abs(stats.zscore(df)) < 3).all(axis=1)]

描述:

  • 对于每一列,它首先计算列中每个值相对于列均值和标准差的 Z 分数。
  • 然后它采用绝对 Z 分数,因为方向无关紧要,只有当它低于阈值时。
  • all(axis=1) 确保对于每一行,所有列都满足约束。
  • 最后,此条件的结果用于索引数据帧。

根据单列过滤其他列

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

原文由 tanemaki 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题