python3常用的数据清洗方法(小结)
Python  /  管理员 发布于 7年前   348
首先载入各种包:
import pandas as pdimport numpy as npfrom collections import Counterfrom sklearn import preprocessingfrom matplotlib import pyplot as plt%matplotlib inlineimport seaborn as sns plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字体设置-黑体plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题sns.set(font='SimHei') # 解决Seaborn中文显示问题
读入数据:这里数据是编造的
data=pd.read_excel('dummy.xlsx')
本案例的真实数据是这样的:
对数据进行多方位的查看:
实际情况中可能会有很多行,一般用head()看数据基本情况
data.head() #查看长啥样data.shape #查看数据的行列大小data.describe()
#列级别的判断,但凡某一列有null值或空的,则为真data.isnull().any()#将列中为空或者null的个数统计出来,并将缺失值最多的排前total = data.isnull().sum().sort_values(ascending=False)print(total)#输出百分比:percent =(data.isnull().sum()/data.isnull().count()).sort_values(ascending=False)missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])missing_data.head(20)
也可以从视觉上直观查看缺失值:
import missingnomissingno.matrix(data)data=data.dropna(thresh=data.shape[0]*0.5,axis=1) #至少有一半以上是非空的列筛选出来
#如果某一行全部都是na才删除:data.dropna(axis=0,how='all')
#默认情况下是只保留没有空值的行data=data.dropna(axis=0)
#统计重复记录数data.duplicated().sum()data.drop_duplicates()
对连续型数据和离散型数据分开处理:
data.columns#第一步,将整个data的连续型字段和离散型字段进行归类id_col=['姓名']cat_col=['学历','学校'] #这里是离散型无序,如果有序,请参考map用法,一些博客上有写cont_col=['成绩','能力'] #这里是数值型print (data[cat_col]) #这里是离散型的数据部分print (data[cont_col])#这里是连续性数据部分
对于离散型部分:
#计算出现的频次for i in cat_col: print (pd.Series(data[i]).value_counts()) plt.plot(data[i])
#对于离散型数据,对其获取哑变量dummies=pd.get_dummies(data[cat_col])dummies
对于连续型部分:
#对于连续型数据的大概统计:data[cont_col].describe()#对于连续型数据,看偏度,一般大于0.75的数值做一个log转化,使之尽量符合正态分布,因为很多模型的假设数据是服从正态分布的skewed_feats = data[cont_col].apply(lambda x: (x.dropna()).skew() )#compute skewnessskewed_feats = skewed_feats[skewed_feats > 0.75]skewed_feats = skewed_feats.indexdata[skewed_feats] = np.log1p(data[skewed_feats])skewed_feats
#对于连续型数据,对其进行标准化scaled=preprocessing.scale(data[cont_col])scaled=pd.DataFrame(scaled,columns=cont_col)scaled
m=dummies.join(scaled)data_cleaned=data[id_col].join(m)data_cleaned
看变量之间的相关性:
data_cleaned.corr()
#以下是相关性的热力图,方便肉眼看def corr_heat(df): dfData = abs(df.corr()) plt.subplots(figsize=(9, 9)) # 设置画面大小 sns.heatmap(dfData, annot=True, vmax=1, square=True, cmap="Blues") # plt.savefig('./BluesStateRelation.png') plt.show()corr_heat(data_cleaned)
如果有觉得相关性偏高的视情况删减某些变量。
#取出与某个变量(这里指能力)相关性最大的前四个,做出热点图表示k = 4 #number of variables for heatmapcols = corrmat.nlargest(k, '能力')['能力'].indexcm = np.corrcoef(data_cleaned[cols].values.T)sns.set(font_scale=1.25)hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10}, yticklabels=cols.values, xticklabels=cols.values)plt.show()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号