我有一个这样的数据框:
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
错误。你能告诉我哪里弄错了吗?
答案 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,因此实际上并没有删除任何东西(平均值受到异常值的强烈影响的一个很好的例子)。