我有一个str,int和float类型的混合数据框。我在float列中有一些离群值,并尝试使用
将其替换为NaNdf.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
答案 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的情况。
希望这会有所帮助!