>我有一个这样的数据帧:
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)
这将计算为布尔值,因为您正在执行两个布尔值的按位运算。
然后,您尝试使用布尔键为数据框编制索引,但失败。