处理 Pandas 中的异常值 [重复]

Posted

技术标签:

【中文标题】处理 Pandas 中的异常值 [重复]【英文标题】:Dealing with outliers in Pandas [duplicate] 【发布时间】:2021-04-09 04:42:12 【问题描述】:

美好的一天。问题如下 - 尝试从表中的一列中删除异常值时

import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
from scipy.stats import norm
from scipy import stats
import numpy as np

df = pd.read_csv("https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBM-DA0321EN-SkillsNetwork/LargeData/m2_survey_data.csv")
df["ConvertedComp"].plot(kind="box", figsize=(10,10))
z_scores = stats.zscore(df["ConvertedComp"])
abs_z_scores = np.abs(z_scores)
filtered_entries = (abs_z_scores < 3).all(axis=1)
new_df = df[filtered_entries]

以下错误崩溃。

---------------------------------------------------------------------------
AxisError                                 Traceback (most recent call last)
<ipython-input-133-7811da442811> in <module>
      4 z_scores
      5 abs_z_scores = np.abs(z_scores)
----> 6 filtered_entries = (abs_z_scores < 3).all(axis=1)
      7 #new_df = df[filtered_entries]

C:\ProgramData\WatsonStudioDesktop\miniconda3\envs\desktop\lib\site-packages\numpy\core\_methods.py in _all(a, axis, dtype, out, keepdims)
     44 
     45 def _all(a, axis=None, dtype=None, out=None, keepdims=False):
---> 46     return umr_all(a, axis, dtype, out, keepdims)
     47 
     48 def _count_reduce_items(arr, axis):

AxisError: axis 1 is out of bounds for array of dimension 1

非常感谢您的建议,想法快结束了

【问题讨论】:

维数为 1 的数组(例如简单的数字列表)只有一个轴:轴 0。 【参考方案1】:

您的 zscore 仅计算 1 列,因此结果是一维数组

z_scores = stats.zscore(df["ConvertedComp"])
new_df = df[np.abs(z_scores) < 3]

现在,如果您在多个列上运行 zscore,那么您的原始代码将可以工作:

z_scores = stats.zscore(df[["ConvertedComp", 'AnotherColumn']])
new_df = df[(np.abs(z_scores) < 3).all(axis=1)]

【讨论】:

以上是关于处理 Pandas 中的异常值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

pandas_处理异常值缺失值重复值数据差分

检查 Pandas 数据框的异常值 [重复]

pandas进行数据预处理

pandas学习(常用数学统计方法总结读取或保存数据缺省值和异常值处理)

​一文看懂数据清洗:缺失值、异常值和重复值的处理

pandas 库前置知识