如何一次性检测和删除Pandas数据帧中每列的异常值?

9 浏览
0 Comments

如何一次性检测和删除Pandas数据帧中每列的异常值?

我有一个包含六列的pandas数据框,我知道每一列中都有一些异常值。所以我有这两行代码,它们基本上做了我想做的事情。但是它只从数据框的一列中删除异常值。那么如果我想将每一列的异常值都删除掉,应该怎么做呢?\n

df = pd.DataFrame({'stlines':np.random.normal(size=533)})
df = df[np.abs(df.stlines-df.stlines.mean()) <= (2*df.stlines.std())]

\n有什么优雅的方法可以做到这一点吗?

0
0 Comments

在处理pandas数据帧时,有时会遇到异常值(outliers)的问题。异常值是指与其他值相比明显不同的数值。当数据集中存在异常值时,可能会影响数据分析的结果和模型的准确性。因此,我们需要检测和移除异常值。

对于每一列的pandas数据帧,我们可以使用以下方法来检测和移除异常值:

首先,我们可以定义一个函数filter_outliers(df, columns)来过滤异常值。该函数接受一个数据帧和要处理的列作为参数。

在函数中,我们使用了一个生成器表达式,通过调用make_mask(df, column)函数来生成一个布尔掩码(mask)。这个布尔掩码用于标记是否为异常值。我们对每一列都生成一个掩码,然后使用np.logical_or.reduce(masks)函数将所有的掩码合并成一个完整的掩码。

make_mask(df, column)函数用于生成每一列的掩码。首先,我们对列进行标准化,计算出每个值与列均值的差值,并除以列的标准差。然后,我们使用绝对值大于等于2的条件来判断是否为异常值。

最后,我们返回筛选出的数据帧df[full_mask],其中包含了已经移除了异常值的数据。

通过使用上述方法,我们可以一次性检测和移除pandas数据帧中每一列的异常值。这样可以使数据更加可靠和准确,提高后续的数据分析和建模的效果。

0
0 Comments

在处理Pandas数据框时,有时候需要检测和删除异常值(outliers)。异常值可能会对数据分析和建模产生不良影响,因此需要进行清理。

问题:如何一次性检测和删除Pandas数据框中每一列的异常值?

解决方法:

使用Pandas的apply函数结合lambda表达式可以实现一次性检测和删除每一列的异常值。

代码如下:

df[df.apply(lambda x :(x-x.mean()).abs() < (2*x.std()) ).all(1)]

以上代码的解释如下:

1. `(x-x.mean()).abs()`:计算每个值与该列均值的差的绝对值,用于检测异常值。

2. `(2*x.std())`:计算该列的标准差的两倍,用于定义异常值的阈值范围。

3. `df.apply(lambda x :(x-x.mean()).abs() < (2*x.std()) )`:对每一列应用lambda表达式,返回一个布尔型的数据框,表示每个值是否为异常值。

4. `.all(1)`:对每一行进行逻辑与操作,判断是否所有列的值都为True,即是否为异常值。返回一个布尔型的Series。

5. `df[df.apply(lambda x :(x-x.mean()).abs() < (2*x.std()) ).all(1)]`:根据上一步的结果,选择所有值都为True的行,即删除了异常值的数据框。

通过以上方法,我们可以一次性检测和删除每一列的异常值,提高数据清理的效率。

0
0 Comments

问题的出现原因是每列中的异常值可能发生在不同的行(记录)。解决方法是使用pandas.DataFrame.mask函数将异常值替换为np.nan,然后再使用dropna函数删除所有列中存在异常值的行。

具体操作如下:

1. 使用np.random.seed([3, 1415])来设置随机种子,保证每次运行生成的随机数一致。

2. 创建一个包含20行8列的随机数组成的DataFrame,列名为A-H。

3. 使用df.mask((df - df.mean()).abs() > 2 * df.std())函数将每列中超过平均值两倍标准差的值替换为np.nan

4. 使用dropna()函数删除所有列中存在np.nan的行,得到最终的结果。

最终结果如下:

A B C D E F G H

1 0.715364 0.770763 -0.608208 0.352390 -0.352521 -0.415869 -0.911575 -0.142538

3 1.063243 1.062997 0.591860 0.296212 -0.774732 0.831452 1.486976 0.256220

4 -0.899906 0.375085 -0.519501 0.050101 0.949959 -1.033773 0.948247 0.733776

5 1.236118 0.155475 -1.341267 0.162864 1.258253 0.778040 1.341599 -1.636039

6 -0.195368 0.131820 2.069013 0.048729 -1.500564 0.907342 0.029326 0.066119

9 0.403321 0.992765 0.025249 -1.664999 -1.558044 -0.361630 -1.784971 -0.318569

10 -0.326400 -0.688203 0.506420 -0.386706 -0.368351 -0.293383 -2.086973 -0.807873

11 0.068855 -0.525141 0.745524 0.911930 -0.277785 -0.866313 1.155518 1.421480

12 1.416653 -0.120607 1.367540 -0.811585 -0.205071 -0.450472 -0.993868 -0.084107

14 -1.070002 0.525867 0.616915 0.399136 -0.233075 -0.482919 -1.018142 -1.673869

16 -0.352254 0.170126 -0.943541 0.627847 -0.948773 0.126131 1.162792 -0.492266

17 -0.444413 -0.028003 -0.286051 0.895515 -0.234507 1.005886 -1.350465 -0.959034

18 0.992524 -1.471428 0.270001 -1.197004 -0.324760 -1.383568 0.838075 -1.125205

19 0.024837 0.238895 0.350742 -0.541868 -0.730284 0.113695 0.068872 -0.032520

0