异常值处理
有关异常值的确定有很多种规则和方法,这里使用Z标准化得到的阈值作为判断标准:当标准化后的得分超过阈值则为异常。完整代码如下:
注:代码用 jupyter notebook跑的,分割线线上为代码,分割线下为运行结果
import pandas as pd
#生成异常数据
df=pd.DataFrame({'col1':[1,120,3,5,2,12,13],
'col2':[12,17,31,53,22,32,43]})
# col1 col2
# 0 1 12
# 1 120 17
# 2 3 31
# 3 5 53
# 4 2 22
# 5 12 32
# 6 13 43
#通过z-score方法判断异常值
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
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
阈值的设定是确定异常与否的关键,通常当阈值大于2时,已经是相对异常的表现值。
重复值处理
有关重复值的处理代码示例如下:
import pandas as pd
#生成重复数据
data1=['a',3]
data2=['b',2]
data3=['a',3]
data4=['c',2]
df=pd.DataFrame([data1,data2,data3,data4],columns=['col1','col2'])
#判断重复数据
isDuplicated=df.duplicated() #判断重复数据记录
print(isDuplicated)
--------------------------------------------------------------------------------
0 False
1 False
2 True
3 False
dtype: bool
#删除重复值
new_df1=df.drop_duplicates() #删除数据记录纸所有列值相同的记录
new_df2=df.drop_duplicates(['col1']) #删除数据记录中col1值相同的记录
new_df3=df.drop_duplicates(['col2']) #删除数据记录中col2值相同的记录
new_df4=df.drop_duplicates(['col1','col2']) #删除数据记录中指定列(col1/col2)值相同的记录
print(new_df1)
print(new_df2)
print(new_df3)
print(new_df4)
-----------------------------------------------------------------------------------
col1 col2
0 a 3
1 b 2
3 c 2
col1 col2
0 a 3
1 b 2
3 c 2
col1 col2
0 a 3
1 b 2
col1 col2
0 a 3
1 b 2
3 c 2