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