Numpy Pandas删除异常值

时间:2018-04-06 18:32:26

标签: python pandas numpy

我正在尝试创建一个函数,该函数将解析一个值数组,然后更新数组,而不会通过落在四分位数范围之外确定为异常值的值。虽然我觉得我所拥有的条件将测试并输出正确的答案,但我不确定如何将一列值的值传递到数据框中,以便删除与异常情况相匹配的行。目前我的数据带有typeError。

错误: TypeError: tuple indices must be integers, not str

功能:

def reject_outliers_iqr(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))

数据帧:

rawData = pd.read_csv(parent_folder + "/" + csv_file)
print(rawData.head())

     date day_of_week  leads  clicks  sal
0  1/1/17      Sunday      0     527    0
1  1/2/17      Monday      0    1013    0
2  1/3/17     Tuesday      0    1428    0
3  1/4/17   Wednesday      0    1461    0
4  1/5/17    Thursday      0    1429    0

1 个答案:

答案 0 :(得分:1)

你的函数的最后一行在我看来至少包含三个错误,应该是

return np.where((data > lower_bound) & (data < upper_bound))
  1. 数据应高于下限低于上限

  2. 逻辑连词为&,而不是>

  3. 一旦纠正,它就好了,就像在(使用你的数据)中一样:

    >>> df.iloc[reject_outliers_iqr(df.clicks)]
        date    day_of_week leads   clicks  sal
    0   1/1/17  Sunday  0   527 0
    1   1/2/17  Monday  0   1013    0
    2   1/3/17  Tuesday 0   1428    0
    3   1/4/17  Wednesday   0   1461    0
    4   1/5/17  Thursday    0   1429