【问题标题】:Removing outliers and surrounding data from dataframe从数据框中删除异常值和周围数据
【发布时间】:2023-03-11 15:46:01
【问题描述】:

我有一个数据集,其中包含一些我想删除的异常值。 我想去掉下图数据框中的0值:

df = pd.DataFrame({'Time': [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9], 'data': [1.1, 1.05, 1.01, 1.05, 0, 1.2, 1.1, 1.08, 1.07, 1.1]})

我可以这样做以删除低于某个阈值的值:

df.loc[df['data'] < 0.5, 'data'] = np.NaN

这给我一个没有“0”值的列表:

   Time  data
0   0.0  1.10
1   0.1  1.05
2   0.2  1.01
3   0.3  1.05
4   0.4   NaN
5   0.5  1.20
6   0.6  1.10
7   0.7  1.08
8   0.8  1.07
9   0.9  1.10

但是,我也对围绕无效值的数据持怀疑态度,并希望将值“0.2”时间单位从异常值中删除。像下面这样:

   Time  data
0   0.0  1.10
1   0.1  1.05
2   0.2   NaN
3   0.3   NaN
4   0.4   NaN
5   0.5   NaN
6   0.6   NaN
7   0.7  1.08
8   0.8  1.07
9   0.9  1.10

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以获得所有测量结果不佳的时间点的列表,并过滤所有附近的时间值:

    bad_times = df.Time[df['data'] < 0.5]
    
    for t in bad_times:
        df.loc[(df['Time'] - t).abs() <= 0.2, 'data'] = np.NaN
    

    结果:

    >>> print(df)
       Time  data
    0   0.0  1.10
    1   0.1  1.05
    2   0.2   NaN
    3   0.3   NaN
    4   0.4   NaN
    5   0.5   NaN
    6   0.6   NaN
    7   0.7  1.08
    8   0.8  1.07
    9   0.9  1.10
    

    【讨论】:

      【解决方案2】:

      您可以获取要删除的时间列表,然后为这些行应用 nan。

      df.loc[df['data'] < 0.5, 'data'] = np.NaN
      l=df[df['data'].isna()]['Time'].values
      l2=[]
      for i in l:
          l2=l2+[round(i-0.1,1),round(i-0.2,1),round(i+0.1,1),round(i+0.2,1)]
      df.loc[df['Time'].isin(l2), 'data'] = np.nan
      

      【讨论】:

        猜你喜欢
        • 2017-10-26
        • 2018-03-23
        • 1970-01-01
        • 2018-01-09
        • 1970-01-01
        • 2021-03-24
        • 2016-08-20
        • 1970-01-01
        • 2022-12-22
        相关资源
        最近更新 更多