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

Removing outlier from dataframe by filtering single column

我有一个这样的数据框:

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

通过对 C 列应用 mean+/- 2std.deviation 方法,我希望从 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

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

我认为问题是:

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

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

然后您尝试使用布尔键索引数据框,但失败了。

您只需要对目标列进行操作即可获得布尔系列而不是单个布尔值:

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

请注意,我将 - 固定为 +。另请注意,由于均值约为 530,标准差约为 700,这实际上并没有删除任何东西(均值受异常值强烈影响的一个很好的例子)。