我有一个包含几列的 pandas 数据框。
现在我知道某些行是基于某个列值的异常值。
例如
column 'Vol' has all values around
12xx
and one value is4000
(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/