我有一个只有几列的熊猫数据框。
现在我知道某些行是基于特定列值的异常值。
例如
柱子Vol
所有值都在 12xx 左右,其中一个值为 4000(异常值)。
我想排除那些有Vol
像这样的专栏。
因此,本质上我需要在数据框中放置一个过滤器,以便我们选择特定列的值在平均值的 3 个标准差之内的所有行。
实现这一目标的优雅方法是什么?
Use scipy.stats.zscore
删除至少一列中存在异常值的所有行
如果您的数据框中有多列,并且想要删除至少一列中具有离群值的所有行,则以下表达式将一次性完成此操作:
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 分数,因为方向不
仅当其低于阈值时才重要。
-
( < 3).all(axis=1)
检查每行的所有列值是否均在平均值的 3 个标准差范围内
- 最后,该条件的结果用于索引数据帧。
根据单个列过滤其他列
与上面相同,但指定一列zscore
, df[0]
例如,并删除.all(axis=1)
.
df[np.abs(stats.zscore(df[0])) < 3]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)