Python:用中值替换异常值

标签 python pandas numpy

我有一个 python 数据框,其中有一些离群值。如果这些值不存在,我想用数据的中值替换它们。

id         Age
10236    766105
11993       288
9337        205
38189        88
35555        82
39443        75
10762        74
33847        72
21194        70
39450        70

因此,我想将所有 > 75 的值替换为剩余数据集的数据集的中值,即 70,70,72,74,75 的中值。

我正在尝试执行以下操作:

  1. 用0替换,所有大于75的值
  2. 用中值替换 0。

但不知何故,下面的代码不起作用

df['age'].replace(df.age>75,0,inplace=True)

最佳答案

我想这就是你要找的,你可以使用 loc 来赋值。然后就可以填nan了

median = df.loc[df['Age']<75, 'Age'].median()
df.loc[df.Age > 75, 'Age'] = np.nan
df.fillna(median,inplace=True)

你也可以在一行中使用 np.where

df["Age"] = np.where(df["Age"] >75, median,df['Age'])

你也可以使用 .mask 即

df["Age"] = df["Age"].mask(df["Age"] >75, median)

关于Python:用中值替换异常值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45386955/

相关文章:

Python 正则表达式命名组以

python - 在一张图中绘制多个 Pandas 数据框

python - Pandas 切片列的每个行项目

python - 如何在文件中写入字符串和 numpy 数组?

python 鳗鱼 : "Access Denied"

python - macOS,是否可以终止单个 python 线程?

python - 如何对数据透视表数据框中的工作日进行排序?

python - 按时间过滤 Pandas 数据框

python - 拆分出同时包含 str 和 int 的列

python - 使用 ctypes 调用带有指针参数的 C++ 函数