Python:用中值替换异常值

Python:用中值替换异常值,python,pandas,numpy,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

我有一个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的中值

我正在努力做到以下几点:

  • 替换为0,所有大于75的值
  • 将0替换为中值
  • 但不知何故,下面的代码不起作用

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

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

    median = df.loc[df['Age']<75, 'Age'].median()
    df.loc[df.Age > 75, 'Age'] = np.nan
    df.fillna(median,inplace=True)
    
    你也可以使用.mask,即

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

    我最近尝试过一个更普遍的解决方案:用整个柱的中间值替换75,然后采用类似于Bharath建议的解决方案:

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

    更改为
    Age>75
    +1Glad帮助@user4943236,但在这种情况下,用作阈值的中值将受到所有值(包括异常值)的影响。
    median = float(df['Age'].median())
    df["Age"] = np.where(df["Age"] > median, median, df['Age'])