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



>我有一个这样的数据帧:

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

通过将 mean+/- 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

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

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

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

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

我相信问题是:

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

这将计算为布尔值,因为您正在执行两个布尔值的按位运算。

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

最新更新