python – 如何使用IQR的pandas过滤器?

是否有一种内置的方法可以通过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()

Comparison before and after filterinf

由于这个答案,我在这主题上写了一个post,你可以找到更多的信息.

相关文章

转载:一文讲述Pandas库的数据读取、数据获取、数据拼接、数...
Pandas是一个开源的第三方Python库,从Numpy和Matplotlib的基...
整体流程登录天池在线编程环境导入pandas和xrld操作EXCEL文件...
 一、numpy小结             二、pandas2.1为...
1、时间偏移DateOffset对象DateOffset类似于时间差Timedelta...
1、pandas内置样式空值高亮highlight_null最大最小值高亮背景...