我有一个熊猫数据框,几乎没有列
现在我知道某些行是基于特定列值的异常值
比如说
“Vol”列的所有值都在
12xx附近,其中一个值为4000(异常值)
现在,我想排除那些像这样有Vol列的行
所以,本质上我需要在数据框上放置一个过滤器,这样我们就可以选择所有行,其中某一列的值在,比如说,平均值的3个标准偏差之内
实现这一目标的优雅方式是什么
如果您的数据帧中有多个列,并且希望删除至少一列中包含异常值的所有行,则以下表达式可以一次性完成此操作。
df=pd.DataFrame(np.random.randn(100,3))
从scipy导入统计信息
df[(np.abs(stats.zscore(df))<;3).all(axis=1)]
说明:
- 对于每个列,它首先计算
柱,相对于柱平均值和标准偏差 - 然后它会得到绝对的Z分数,因为方向不是
只有当它低于临界值时,它才是重要的 - all(axis=1)确保每行的所有列都满足
约束 - 最后,使用此条件的结果对数据帧进行索引
基于单个列筛选其他列
- 例如,为
zscore,df[0]指定一列,然后删除.all(axis=1)
df[(np.abs(stats.zscore(df[0]))<;3)]