Python 从数据集中检测和删除异常值

Python 从数据集中检测和删除异常值,python,jupyter-notebook,Python,Jupyter Notebook,我对这个必须完成的练习感到有点沮丧。我对python相当陌生,但对Matlab有一些经验,尽管它完全不同 我需要检测数据集中的所有异常值并删除它们。我已经通过IQR和Z分数成功地定位了异常值,并且得到了一个正确和错误的列表。这很好,只是我不知道如何访问表示False的特定行,以定位外围数据的确切行,以便将其从数据集中删除。我已经在网上搜索了好几个小时,堆栈溢出,我完全被困在这个问题上了。感谢您的帮助 错误: IndexingError:作为索引器提供的不可对齐的布尔序列(布尔序列的索引和索引对象

我对这个必须完成的练习感到有点沮丧。我对python相当陌生,但对Matlab有一些经验,尽管它完全不同

我需要检测数据集中的所有异常值并删除它们。我已经通过IQR和Z分数成功地定位了异常值,并且得到了一个正确和错误的列表。这很好,只是我不知道如何访问表示False的特定行,以定位外围数据的确切行,以便将其从数据集中删除。我已经在网上搜索了好几个小时,堆栈溢出,我完全被困在这个问题上了。感谢您的帮助

错误:


IndexingError:作为索引器提供的不可对齐的布尔序列(布尔序列的索引和索引对象的索引不匹配)。[在此处输入图像描述][1]

!![1] :

您可以尝试以下方法:

df = data.iloc[((data['mpg'] >= q1-limit)| (data['mpg'] >= q3+limit)).index, :].reset_index(inplace = True) 

嗯,有很多方法可以精简数据,或者在您的情况下,去除异常值。这里有两种标准方法。第一个使用列表理解,这是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])
[5]中的
:数据
出[5]:[1,5,66,2,33,400,26,201]
[6]中:平均值=总和(数据)/len(数据)

在[7]中:data_trimmed=[t代表数据中的t如果t可以提供代码和错误?查找“numpy boolean index”索引错误:作为索引器提供的不可对齐的布尔序列(布尔序列的索引和索引对象的索引不匹配)是错误吗?您可以再试一次吗?看起来您已经为数据变量重新分配了一个新的dataframe,但它不是原始格式。请确认一次。我还对解决方案进行了一些编辑。KeyError:“没有[Int64Index([1、2、3、4、5、6、7、8、9、10、\n…\n 386、387、388、389、390、391、392、393、394、395],\n dtype='int64',length=393)]位于[列]“我从您的新代码中得到该错误。数据变量的数据帧不变。”