【问题标题】:Filtering outliers from DataFrame从 DataFrame 中过滤异常值
【发布时间】:2018-11-19 09:08:19
【问题描述】:

我在过滤数据时遇到了一个大问题。我在stackoverflow和其他页面和教程上阅读了很多,但我无法解决我的具体问题...... 我将数据加载到 python 中的代码的第一部分如下所示:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from arch import arch_model


spotmarket = pd.read_excel("./data/external/Spotmarket_dhp.xlsx", index=True)

r = spotmarket['Price'].pct_change().dropna()

returns = 100 * r
df = pd.DataFrame(returns)

Excel 表的一列有 43.000 个值,包括每小时价格。我使用这些数据来计算每小时的百分比变化,问题是,有时在 1000% 到 40000% 之间会有很大的变化。数据框如下所示:

df
Out[12]: 
              Price
1         20.608229
2         -2.046870
3          6.147789
4         16.519258
             ...
43827    -16.079874
43828     -0.438322
43829    -40.314465
43830   -100.105374
43831    700.000000
43832    -62.500000
43833 -40400.000000
43834      1.240695
43835     52.124183
43836     12.996778
43837    -17.157795
43838    -30.349971
43839      6.177924
43840     45.073701
43841     76.470588
43842      2.363636
43843     -2.161042
43844     -6.444781
43845    -14.877102
43846      6.762918
43847    -38.790036
[43847 rows x 1 columns]

我想排除这个异常值。我尝试了不同的方法,例如计算 meanstd 并排除所有值是 + 和 - 三倍的 std 远离 mean。它适用于一小部分数据,但对于完整数据,均值和标准值都是NaN。有人知道如何过滤我的数据框吗?

【问题讨论】:

  • 你试试this 吗?
  • @jezrael 是的,我已经尝试过了,但它不起作用。我不确定,但可能是我的参考文献有问题……你能给我一个使用这种方法的代码示例吗?
  • hmmm,它看起来像一些数据相关问题,所以如果不保密,是否可以共享您的数据?只需要价格列,其他列可以删除
  • 是的,我可以与您分享。我在哪里可以提供数据?
  • 如果没问题,发到我个人资料中的邮箱

标签: python dataframe filtering outliers


【解决方案1】:

我认为需要按quantile 的百分位数过滤:

r = spotmarket['Price'].pct_change() * 100

Q1 = r.quantile(.25)
Q3 = r.quantile(.75)
q1 = Q1-1.5*(Q3-Q1)
q3 = Q3+1.5*(Q3-Q1)

df = spotmarket[r.between(q1, q3)]

【讨论】:

    【解决方案2】:

    您是否应该首先丢弃所有导致这些波动的值,然后创建数据框。一种方法是使用filter()

    【讨论】:

      猜你喜欢
      • 2020-06-22
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 2020-11-08
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      相关资源
      最近更新 更多