通过过滤单列从数据框中删除异常值
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,这实际上并没有删除任何东西(均值受异常值强烈影响的一个很好的例子)。
我有一个这样的数据框:
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,这实际上并没有删除任何东西(均值受异常值强烈影响的一个很好的例子)。