我目前正尝试使用中值绝对偏差法从我的数据集中删除离群值。
为此,我按照@tanemaki 在Detect and exclude outliers in Pandas data frame 中给出的说明进行操作。 ,这样可以删除包含至少一个离群值的整行。
在我链接的帖子中,提出了同样的问题,但没有得到回答。
问题是我只想在单个列中搜索异常值。
因此,例如,我的数据框如下所示:
Temperature Date
1 24.72 2.3
2 25.76 4.6
3 25.42 7.0
4 40.31 9.3
5 26.21 15.6
6 26.59 17.9
例如数据中有两个'异常:
- 第[4]行的温度值
- 第 [5] 行中的日期值
因此,我想要的是离群值函数只“注意到”温度列中的异常,并删除其对应的行。
我使用的离群值代码是:
df=pd.read_excel(r'/home/.../myfile.xlsx')
from scipy import stats
df[pd.isnull(df)]=0
dfn=df[(np.abs(stats.zscore(df))<4).all(axis=1)] #@taneski
print(dfn)
我生成的数据框目前看起来像:
Temperature Date
1 24.72 2.3
2 25.76 4.6
3 25.42 7.0
6 26.59 17.9
如果我没有传达我的信息,期望的输出将是:
Temperature Date
1 24.72 2.3
2 25.76 4.6
3 25.42 7.0
5 26.21 15.6
6 26.59 17.9
任何指针都会有很大帮助。谢谢!
最佳答案
您始终可以将 stats.zscore
操作限制在 Temperature
列而不是整个 df
上。可能像这样:
In [573]: dfn = df[(np.abs(stats.zscore(df['Temperature']))<4)]
In [574]: dfn
Out[574]:
Temperature Date
1 24.72 2.3
2 25.76 4.6
3 25.42 7.0
5 26.21 15.6
6 26.59 17.9
关于python - 针对在单个列中发现的离群值删除数据集的整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61815114/