是否有一种内置的方法可以通过iqr对列进行过滤(即Q1-1.5iqr和Q3 1.5iqr之间的值)?
另外,建议大熊猫中任何其他可能的广义过滤都将受到重视.
解决方法:
# Some test data
np.random.seed(33454)
df = (
# A standard distribution
pd.DataFrame({'nb': np.random.randint(0, 100, 20)})
# Adding some outliers
.append(pd.DataFrame({'nb': np.random.randint(100, 200, 2)}))
# Reseting the index
.reset_index(drop=True)
)
# Computing iqr
Q1 = df['nb'].quantile(0.25)
Q3 = df['nb'].quantile(0.75)
iqr = Q3 - Q1
# Filtering Values between Q1-1.5iqr and Q3+1.5iqr
filtered = df.query('(@Q1 - 1.5 * @iqr) <= nb <= (@Q3 + 1.5 * @iqr)')
然后我们可以绘制结果以检查差异.我们观察到左侧框图中的异常值(183处的交叉)在过滤后的系列中不再出现.
# Ploting the result to check the difference
df.join(filtered, rsuffix='_filtered').Boxplot()
由于这个答案,我在这个主题上写了一个post,你可以找到更多的信息.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。