异常值的处理需要考虑业务情景,不同的业务情景对异常值的定义及处理方式不同
初步利用数据描述的转置查看连续型数据的情况
# 转置只是为了更加便于观看
DataFrame.describe().T
显示某个连续型特征标准分的绝对值是大于3的数据信息(一般认为是异常值)
# create std_score
std_score = (DataFrame['column_name'] - DataFrame['column_name'].mean())/DataFrame['column_name'].std()
# show detail information of DataFrame whose std_score.abs() > 3
DataFrame[std_score.abs()>3]
# find index
del_index = DataFrame[std_score.abs()>3].index
# drop those by index
DataFrame.drop(del_index,inplace=True)
在特定业务背景下,若A列特征的值大于B列特征的值,则为异常值
# 查看异常值具体信息
DataFrame[DataFrame['columnA'] > DataFrame['columnB']]
# 确定索引
del_index = DataFrame[DataFrame['columnA'] > DataFrame['columnB']].index
# 删除异常值
DataFrame.drop(del_index,inplace=True)
合并多个异常值判断条件结果
# 合并多个异常值判断条件所得到的DataFrame
pd.concat([DataFrame[std_score.abs()>3], DataFrame[DataFrame['columnA'] > DataFrame['columnB']]])
# 确定索引
del_index = pd.concat([DataFrame[std_score.abs()>3], DataFrame[DataFrame['columnA'] > DataFrame['columnB']]]).index
# 删除
DataFrame.drop(del_index,inplace=True)