用熊猫替换混合数据框中的异常值

时间:2020-05-19 16:02:09

标签: python pandas numpy dataframe outliers

我有一个str,int和float类型的混合数据框。我在float列中有一些离群值,并尝试使用

将其替换为NaN
df.mask(df.sub(df.mean()).div(df.std()).abs().gt(2))

我也尝试过numpy的

v = df.values
mask = np.abs((v - v.mean(0)) / v.std(0)) > 2
pd.DataFrame(np.where(mask, np.nan, v), df.index, df.columns)`

但是对于我俩,我都得到TypeError: unsupported operand type(s) for -: 'str' and 'float'TypeError: must be str, not float

我还尝试将其仅应用于具有异常值的列,但未修改任何内容

这是df的外观

    dateRep     cases   deaths  countriesAndTerritories     countryterritoryCode    popData2018 
0   03/05/2020  134.0   4.0     Afghanistan     AFG     37172386.0
1   02/05/2020  164.0   4.0     Afghanistan     AFG     37172386.0
2   01/05/2020  222.0   NaN     Afghanistan     AFG     37172386.0
3   30/04/2020  122.0   0.0     Afghanistan     AFG     37172386.0
4   29/04/2020  124.0   3.0     Afghanistan     AFG     37172386.0  

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的操作(这是为了更改“案例”列):

df.loc[abs(df.cases - df.cases.mean())/df.cases.std() > 1, "cases"] = None

但是,请注意,由于“最大”值为1.63(索引为2的实例),因此在“案例”列中使用的Z值为1。您正在尝试修改Z值大于2的值,这些实例都没有Z值大于2的情况。

希望这会有所帮助!