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

问题描述 投票:0回答:1

我有一个混合数据框,有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  
python pandas numpy dataframe outliers
1个回答
1
投票

你可以试试这样的方法(这是为了改变 "案例 "列)。

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

但是,请注意,这里我对 "Cases "列使用了1的Z值,因为最大的Z值是1.63(index=2的实例)。你是想修改Z值大于2的值,这些实例的Z值都不大于2。

希望能帮到你!

© www.soinside.com 2019 - 2024. All rights reserved.