如何使用IQR的Pandas过滤器

  • Post category:Python

使用IQR的Pandas过滤器,需要先了解什么是IQR。IQR是interquartile range的缩写,又称四分位距,是统计学中常用的一种测量数据变异程度的方法。它是上四分位数和下四分位数之差,通常将它乘以1.5来判定异常值。Pandas提供了一种基于IQR的过滤器,可以方便地进行数据筛选和清理。下面详细讲解如何使用IQR的Pandas过滤器。

  1. 导入Pandas库和数据集

首先需要导入Pandas库和数据集。可以使用Pandas自带的数据集,也可以使用自己的数据集。

import pandas as pd

# 导入自带的数据集iris
iris = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', 
                   header=None, names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])
  1. 计算IQR

使用Pandas的quantile()函数计算IQR。quantile()函数有一个参数q,表示计算分位数的位置比例。例如,q=0.25表示计算下四分位数,q=0.75表示计算上四分位数。用上四分位数减去下四分位数即可得到IQR。

# 计算IQR
q1 = iris.quantile(q=0.25)
q3 = iris.quantile(q=0.75)
iqr = q3 - q1
  1. 定义过滤器

可以定义一个过滤器,将符合条件的行提取出来。

# 定义过滤器
filter = (iris < (q1 - 1.5 * iqr)) | (iris > (q3 + 1.5 * iqr)).any(axis=1)

其中,(iris < (q1 - 1.5 * iqr)) | (iris > (q3 + 1.5 * iqr)) 表示判断是否超出IQR的范围, any(axis=1) 表示每行都会被判断。filter的结果为True或False的布尔序列。

  1. 应用过滤器

将过滤器应用到数据集中,提取符合条件的数据。

# 应用过滤器并输出结果
filtered_data = iris[filter]
print(filtered_data)

这样就可以得到符合条件的数据。

完整代码如下:

import pandas as pd

# 导入自带的数据集iris
iris = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', 
                   header=None, names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'])

# 计算IQR
q1 = iris.quantile(q=0.25)
q3 = iris.quantile(q=0.75)
iqr = q3 - q1

# 定义过滤器
filter = (iris < (q1 - 1.5 * iqr)) | (iris > (q3 + 1.5 * iqr)).any(axis=1)

# 应用过滤器并输出结果
filtered_data = iris[filter]
print(filtered_data)

希望上述的解答能够帮到你,如果还有其他问题,欢迎继续提问。