我正在尝试创建一个函数,该函数将解析一个值数组,然后更新数组,而不会通过落在四分位数范围之外确定为异常值的值。虽然我觉得我所拥有的条件将测试并输出正确的答案,但我不确定如何将一列值的值传递到数据框中,以便删除与异常情况相匹配的行。目前我的数据带有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
答案 0 :(得分:1)
你的函数的最后一行在我看来至少包含三个错误,应该是
return np.where((data > lower_bound) & (data < upper_bound))
数据应高于下限,低于上限。
逻辑连词为&
,而不是>
。
一旦纠正,它就好了,就像在(使用你的数据)中一样:
>>> 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