Python 通过过滤单个列从数据帧中删除异常值

Python 通过过滤单个列从数据帧中删除异常值,python,dataframe,outliers,standard-deviation,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 通过对C列应用mean+/-2std.deviation方法,我希望从C中删除异常值并过滤我最终期望得到的数据帧 A B C 1 10 121 5 6 122 7 8 123 9 10 12

我有这样一个数据帧:

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

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

我认为问题在于:

(目标==下边界)和(目标==上边界)

这将计算为一个布尔值,因为您正在执行两个布尔值的合并


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

我认为问题在于:

(目标==下边界)和(目标==上边界)

这将计算为一个布尔值,因为您正在执行两个布尔值的合并


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

只需对目标列执行操作,即可获得布尔序列,而不是单个布尔值:

target = df['C']
mean = target.mean()
sd = target.std()
selected_df = df[(target > mean - 2*sd) & (target < mean + 2*sd)]
target=df['C']
平均值=目标值。平均值()
sd=target.std()
选定的_df=df[(目标>平均值-2*sd)和(目标<平均值+2*sd)]

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

您只需要对目标列执行操作,以获得布尔级数,而不是单个布尔值:

target = df['C']
mean = target.mean()
sd = target.std()
selected_df = df[(target > mean - 2*sd) & (target < mean + 2*sd)]
target=df['C']
平均值=目标值。平均值()
sd=target.std()
选定的_df=df[(目标>平均值-2*sd)和(目标<平均值+2*sd)]
注意,我将
-
固定为
+
。还要注意的是,由于平均值约为530,标准偏差约为700,这实际上并没有去除任何东西(这是平均值受到异常值强烈影响的一个很好的例子)