【问题标题】:Removing outlier from dataframe by filtering single column通过过滤单列从数据框中删除异常值
【发布时间】:2018-06-15 16:06:03
【问题描述】:

我有一个这样的数据框:

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

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

【问题讨论】:

    标签: python dataframe outliers standard-deviation


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我认为问题是:

      (target==lower_boundary) &amp; (target==upper_boundary)

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

      然后您尝试使用布尔键对数据框进行索引,但失败了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-19
        • 2018-11-19
        • 1970-01-01
        • 2017-04-01
        • 2021-02-27
        • 2022-12-22
        • 1970-01-01
        • 2019-05-21
        相关资源
        最近更新 更多