天天看點

Pandas異常值處理

import pandas as pd

#生成異常資料
df=pd.DataFrame({'col1':[1,120,3,5,2,12,13],
                'col2':[12,17,31,53,22,32,43]})

print(df)
   col1  col2
0     1    12
1   120    17
2     3    31
3     5    53
4     2    22
5    12    32
6    13    43

df_zscore=df.copy() #複制一個用來存儲Z-score得分的資料框
cols=df.columns
for col in cols:
    df_col=df[col]
    z_score=(df_col - df_col.mean()) / df_col.std() #計算每列的Z-score得分
    df_zscore[col] = z_score.abs() > 2.2 #判斷Z-score得分是否大于2.2,如果是則為True,否則為False

#列印,為True即異常值
print(df_zscore)
    col1   col2
0  False  False
1   True  False
2  False  False
3  False  False
4  False  False
5  False  False
6  False  False

#擷取無異常值的資料
df_drop_outlier=df[df_zscore['col1']==False]

#列印
print(df_drop_outlier)
   col1  col2
0     1    12
2     3    31
3     5    53
4     2    22
5    12    32
6    13    43           

複制