检测熊猫系列中的异常值

时间:2020-10-06 11:59:42

标签: python pandas numpy

我有一个样本系列,在此提供了一个可重复的示例:

data = np.array([190, 1, 470, 183, 131, 0, 333, 14, 82, 31])
ser = pd.Series(data, index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'])

我已经用以下代码编写了一个检测离群值的函数:

def detect_outliers(data):
    q1, q3 = np.percentile(data, [25, 75])
    iqr = q3 - q1

    lower_bound = q1 - (iqr * 1.5)
    upper_bound = q3 + (iqr * 1.5)
    return np.where((data > upper_bound) > (data < lower_bound))

当我在系列 ser 上运行此代码时,得到以下输出:

enter image description here

我了解这是指值为470的数据点,即 第三行 (索引= 2)。如何获得输出索引“ C”而不是索引2的信息?

2 个答案:

答案 0 :(得分:0)

像这样改变退货

data[(data > upper_bound) > (data < lower_bound)]

输出:

c    470

答案 1 :(得分:0)

def detect_outliers(data):
    ls = []
    q1, q3 = np.percentile(data, [25, 75])
    iqr = q3 - q1

    lower_bound = q1 - (iqr * 1.5)
    upper_bound = q3 + (iqr * 1.5)
    return data[(data > upper_bound) > (data < lower_bound)]