处理 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 中的异常值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章