首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从DataFrame中过滤离群值

从DataFrame中过滤离群值
EN

Stack Overflow用户
提问于 2018-06-09 22:30:56
回答 2查看 421关注 0票数 1

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

代码语言:javascript
复制
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%之间会有很大的变化。数据帧如下所示:

代码语言:javascript
复制
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,并从mean中排除std +和-3倍的所有值。它适用于一小部分数据,但对于完整的数据,均值和标准差都是NaN。有人知道如何过滤我的数据帧吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-09 23:36:46

我认为需要按百分位数按quantile进行筛选

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-06-10 00:57:56

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50775312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档