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

标签 python pandas filtering dataframe outliers

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

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

例如

column 'Vol' has all values around 12xx and one value is 4000 (outlier).

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

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

有什么优雅的方法可以实现这一目标?

最佳答案

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

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-score 列,相对于列均值和标准差。
  • 然后它采用绝对 Z 分数,因为方向不 仅当它低于阈值时才有意义。
  • all(axis=1) 确保对于每一行,所有列满足 约束。
  • 最后,这个条件的结果被用来索引数据帧。

根据单个列过滤其他列

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

关于python - 检测和排除 pandas DataFrame 中的异常值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23199796/

相关文章:

matlab - 带汉宁窗的傅立叶滤波器后恢复信号

python - 如何查找两个DataFrame之间具有相同ID的所有记录?

r - 根据 data.table 中附加列中的条件对同一列中的多行进行子集化

Python Pandas 在相同 len() 的两列中使用不同的 value_counts()

python - Django 。图片字段。 Django中静态文件的路径

python - pdoc3值错误: File or module 'xxx' not found if imported from other package

python - 如何让 Cloudfiles FormPost 返回 "Access-Control-Allow-Origin" header 以启用 CORS?

python - 从两个列表中获取元素的所有组合?

python - 具有 nan 值的同一图上的多个子图

java - Jersey 用于过滤并返回表示列表的子集