pandas缺失值处理

-- coding: utf-8 --

“”"
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)

你可能感兴趣的:(pandas缺失值处理)