在pandas DataFrame中检测并排除异常值
在pandas DataFrame中检测并排除异常值
我有一个带有几列的熊猫数据框。
现在我知道,某些行的异常值基于某列值。
例如
列“Vol”具有所有值大约为
12xx
,而其中一个值为4000
(异常值)。
现在我想排除具有此类Vol
列的行。
因此,本质上,我需要过滤数据框,以选择所有某列的值从平均值开始,例如,距离平均值的3个标准偏差以内的行。
有什么简洁的方法可以实现这一点吗?
admin 更改状态以发布 2023年5月22日
删除至少有一个异常值的行
如果你的数据框包含多列,且想要删除至少有一个列存在异常值的行,可以使用下面的表达式一次性完成操作:
import pandas as pd import numpy as np from scipy import stats df = pd.DataFrame(np.random.randn(100, 3)) 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)]