Python:用中值替换异常值

时间:2017-07-29 08:06:29

标签: 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替换为中值。
  3. 但不知何故,以下代码无效

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

2 个答案:

答案 0 :(得分:10)

我认为这就是你要找的东西,你可以用loc来分配价值。然后你可以填补南

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)

答案 1 :(得分:0)

我最近尝试过的更通用的解决方案:将75替换为整列的中位数,然后采用类似于Bharath建议的解决方案:

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