对于我必须完成的这个练习,我感到有点沮丧。我是python的新手,但有一些使用Matlab的经验,尽管它是完全不同的。
我需要检测数据集中的所有异常值并删除它们。我已经成功地通过IQR和Z得分定位了异常值,并最终得到了一个真和假的列表。这很好,只是我不知道如何访问显示为False的特定行来定位异常数据的确切行,以便将其从数据集中删除。我已经在网络上搜索了几个小时,堆栈溢出,我只是完全被困在这个问题上。任何帮助都是非常感谢的。
错误:
IndexingError:作为索引器提供的不可对齐的布尔级数(布尔级数和索引对象的索引不匹配).enter此处的图像描述
发布于 2020-09-13 00:37:00
您可以尝试这样做:
df = data.iloc[((data['mpg'] >= q1-limit)| (data['mpg'] >= q3+limit)).index, :].reset_index(inplace = True)
发布于 2020-09-13 00:46:25
嗯,有很多方法可以减少数据,或者在您的情况下,消除异常值。这里有两种标准的方法。第一个使用列表理解,这是python的一个核心特性,非常简单。简单的web搜索可以用来查看许多示例,但在您的情况下,它很适合使用条件语句进行过滤。这可以在基本的python列表上完成。
第二个例子,data2
使用了numpy
库的一个特性,你可能正在使用这个特性,那就是条件索引。基本上,您可以将条件作为索引并使用它。
In [5]: data
Out[5]: [1, 5, 66, 2, 33, 400, 26, 201]
In [6]: mean = sum(data)/len(data)
In [7]: data_trimmed = [t for t in data if t <= mean]
In [8]: data_trimmed
Out[8]: [1, 5, 66, 2, 33, 26]
In [9]: import numpy as np
In [10]: data2 = np.array(data)
In [11]: data2
Out[11]: array([ 1, 5, 66, 2, 33, 400, 26, 201])
In [12]: data2_trimmed = data2[data2 <= mean]
In [13]: data2_trimmed
Out[13]: array([ 1, 5, 66, 2, 33, 26])
https://stackoverflow.com/questions/63866083
复制