当前位置: 首页 > 知识库问答 >
问题:

检测和排除熊猫数据帧中的异常值

强阳曜
2023-03-14

我有一个熊猫数据框,只有几栏。

现在我知道某些行是基于特定列值的异常值。

举个例子

列Vol包含12xx周围的所有值,其中一个值是4000(异常值)。

现在,我想排除那些像这样有Vol列的行。

所以,本质上我需要在数据框上放置一个过滤器,这样我们就可以选择所有行,其中某一列的值在,比如说,平均值的3个标准偏差之内。

实现这一点的优雅方式是什么?

共有3个答案

严项明
2023-03-14

对于每个dataframe列,您可以通过以下方式获得分位数:

q = df["col"].quantile(0.99)

然后过滤:

df[df["col"] < q]

如果需要删除下限和上限异常值,请将条件与and语句结合使用:

q_low = df["col"].quantile(0.01)
q_hi  = df["col"].quantile(0.99)

df_filtered = df[(df["col"] < q_hi) & (df["col"] > q_low)]
亢胤运
2023-03-14

使用布尔索引,就像在numpy.array中一样

df = pd.DataFrame({'Data':np.random.normal(size=200)})
# example dataset of normally distributed data. 

df[np.abs(df.Data-df.Data.mean()) <= (3*df.Data.std())]
# keep only the ones that are within +3 to -3 standard deviations in the column 'Data'.

df[~(np.abs(df.Data-df.Data.mean()) > (3*df.Data.std()))]
# or if you prefer the other way around

对于一个系列,它类似于:

S = pd.Series(np.random.normal(size=200))
S[~((S-S.mean()).abs() > 3*S.std())]
易风华
2023-03-14

如果您的dataframe中有多个列,并且希望删除至少一列中包含异常值的所有行,那么下面的表达式可以一次性完成此操作。

df = pd.DataFrame(np.random.randn(100, 3))

from scipy import stats
df[(np.abs(stats.zscore(df)) < 3).all(axis=1)]

说明:

  • 对于每个列,它首先计算列中每个值相对于列平均值和标准偏差的Z分数
  • zcore指定一列,例如df[0],并删除. all(轴=1)
df[(np.abs(stats.zscore(df[0])) < 3)]
 类似资料:
  • 问题内容: 我有一个只有几列的熊猫数据框。 现在我知道某些行是基于某个列值的离群值。 例如 “ Vol”列的所有值都在周围,12xx而一个值是4000(离群值)。 现在,我想排除具有Vol此类列的行。 因此,从本质上讲,我需要在数据帧上放置一个过滤器,以便我们选择某一列的值在均值例如3个标准差以内的所有行。 有什么优雅的方法可以做到这一点? 问题答案: 如果你的数据框中有多个列,并且希望删除至少一

  • 我有一个很少列的熊猫数据帧。 现在我知道某些行是基于某个列值的离群值。 例如: 列“vol”具有附近的所有值,其中一个值为(离群值)。 现在,我想排除那些具有列的行,如下所示。 所以,本质上我需要在数据帧上放一个过滤器,这样我们就可以选择某一列的值在均值的3个标准差范围内的所有行。 什么是一个优雅的方法来实现这一点?

  • 我有以下数据帧: 我需要删除等于的行。最有效的方法是什么?

  • 我有这个熊猫数据框 这就给了我: 我该怎么办 做一个新的人物, 将标题添加到图"标题这里" 以某种方式创建一个映射,这样标签不是29,30等,而是“29周”,“30周”等。 将图表的较大版本保存到我的计算机(例如10 x 10英寸) 这件事我已经琢磨了一个小时了!

  • 假设熊猫数据帧如下所示: 如何将第三行(如row3)提取为pd数据帧?换句话说,row3.shape应该是(1,5),row3.head()应该是:

  • 问题内容: 我试图突出显示两个数据框之间到底发生了什么变化。 假设我有两个Python Pandas数据框: 我的目标是输出一个HTML表: 标识已更改的行(可以是int,float,boolean,string) 输出具有相同,OLD和NEW值的行(理想情况下,将其输出到HTML表中),以便使用者可以清楚地看到两个数据框之间的变化: id Name score isEnrolled Commen