通过过滤单列从数据框中删除异常值

时间:2018-06-15 16:06:04

标签: python dataframe outliers standard-deviation

我有一个这样的数据框:

A    B   C  
1   10   121
5    6   122  
7    8   123  
9   10   124  
12  23   125
10  24   1500 
13  36   1600

通过将均值+/- 2std.deviation方法应用于C列,我希望从C中删除异常值并过滤我最终期望得到的数据帧

A    B    C  
1   10   121
5    6   122  
7    8   123  
9   10   124  
12  23   125  

这是我的代码:

target=df['C']
mean = target.mean()
sd = target.std()
lower_boundary = [x for x in target if (x < mean - 2 * sd)]
upper_boundary=  [x for x in target if (x > mean - 2 * sd)]

selected_df=df[(target==lower_boundary) & (target==upper_boundary)]
selected_df

但它显示

TypeError: invalid type comparison

错误。你能告诉我哪里弄错了吗?

2 个答案:

答案 0 :(得分:1)

我认为问题是:

  

(target==lower_boundary) & (target==upper_boundary)

这会计算为布尔值,因为您正在执行两个布尔值的bitwise and

然后尝试使用布尔键索引数据框,这是失败的。

答案 1 :(得分:1)

您只需要对目标列执行操作以获取布尔值系列而不是单个布尔值:

target = df['C']
mean = target.mean()
sd = target.std()
selected_df = df[(target > mean - 2*sd) & (target < mean + 2*sd)]

请注意,我已将-修改为+。还要注意,由于平均值约为530,标准差约为700,因此实际上并没有删除任何东西(平均值受到异常值的强烈影响的一个很好的例子)。