“”"
Created on Wed Feb 20 14:19:10 2019
@author: hypc
“”"
import pandas as pd
import numpy as np
data=pd.DataFrame({‘id’:[1,1,1,3,4,5],‘name’:[‘Bob’,‘Bob’,‘Mark’,‘Miki’,‘Sully’,‘Rose’],‘score’:[99,99,87,77,77,np.nan],‘group’:[1,1,1,2,1,2],})
#isnull()方法为查找缺省值
#在进行数据分析前,一般需要了解数据的缺失情况,在Python中可以构造一个lambda函数来查看缺失值
#该lambda函数中,sum(col.isnull())表示当前列有多少缺失,col.size表示当前列总共多少行数据
print(data)
print(data.apply(lambda col:sum(col.isnull())/col.size))
print(‘对sample表的列score填补缺失值,填补方法为均值’)
#pandas数据框提供了fillna方法完成对缺失值的填补,例如对sample表的列score填补缺失值,填补方法为均值:
print(data.score.fillna(data.score.mean()))
#当然还可以以分位数等方法进行填补(中位数)
print(‘对sample表的列score填补缺失值,以分位数等方法进行填补(中位数)’)
print(data.score.fillna(data.score.median()))
print(‘产生缺失值指示变量’)
#pandas数据框对象可以直接调用方法isnull产生缺失值指示变量,例如产生score变量的缺失值指示变量
print(data.score.isnull().apply(int))#进行过缺省填补就是true,也是1
print(data.score.quantile([0.01,0.99]).values.tolist())
def cap(x,quantile=[0.01,0.99]):
“”“盖帽法处理异常值
Args:
x:pd.Series列,连续变量
quantile:指定盖帽法的上下分位数范围
“””
Q01,Q99=x.quantile(quantile).values.tolist()
# 替换异常值为指定的分位数
if Q01>x.min():
x=x.copy()
x.loc[x
if Q99 < x.max():
x=x.copy()
x.loc[x>Q99]=Q99
return(x)
sample=pd.DataFrame({‘normal’:np.random.randn(1000)})
sample.hist(bins=50)
#对pandas数据框所有列进行盖帽法转换,可以以如下写法,从直方图对比可以看出盖帽后极端值频数的变化。
new=sample.apply(cap,quantile=[0.01,0.99])
new.hist(bins=10)