数据分析应用项目化教程(Python) 课件 项目6 使用pandas进行数据清洗_第1页
数据分析应用项目化教程(Python) 课件 项目6 使用pandas进行数据清洗_第2页
数据分析应用项目化教程(Python) 课件 项目6 使用pandas进行数据清洗_第3页
数据分析应用项目化教程(Python) 课件 项目6 使用pandas进行数据清洗_第4页
数据分析应用项目化教程(Python) 课件 项目6 使用pandas进行数据清洗_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章使用pandas进行数据清洗和整理

任务6.1数据清洗数据清洗概述缺失值检测与处理重复值检测与处理异常值检测与处理数据清洗概述数据分析结果的好坏依赖于数据的好坏。很多数据集存在数据缺失,或数据格式不统一(畸形数据),或错误数据的情况。在处理任何数据之前,我们的第一任务是理解数据以及数据是干什么用的。我们尝试去理解数据的列/行、记录、数据格式、语义错误、缺失的条目以及错误的格式,这样我们就可以大概了解数据分析之前要做哪些“清理”工作。数据清洗阶段的主要任务就是处理缺失值、处理重复值、删除离群点和解决属性的不一致性等。缺失值检测与处理缺失值检测isnull()和notnull()函数可以判断数据集中是否存在空值和缺失值。案例df.isnull().sum()#统计各列有多少缺失值df.isnull().sum().sum()#整个dataframe有多少缺失值df.isnull().any()#各个列是否存在缺失值df.isnull().values.any()#整个dataframe是否存在缺失值df['A'].isnull()#检查缺失值df['A'].notnull()#检查非缺失值df['A'].isnull().values.any()#指定列是否存在缺失值df['A'].isnull().sum()#指定列有多少缺失值缺失值检测与处理缺失值处理删除存在缺失值的:dropna(axis=0)默认(axis=0)是逢空值剔除整行,设置关键字参数axis=1表示逢空值去掉整列不会修改原数据,需要接受返回值。案例:df.dropna()#舍弃含有任意缺失值的行df.dropna(axis=1)#舍弃含有任意缺失值的列df.dropna(how='all')#how='any'如果一行(或一列)里任何一个数据有任何出现Nan就去掉整行,'all’一行(或列)每一个数据都是Nan才去掉这整行df.dropna(thresh=2)#舍弃超过两栏缺失值的行缺失值检测与处理替换缺失值:fillna(value,inplace=True)value:替换成的值inplace:True:会修改原数据,False:不替换修改原数据,生成新的对象案例:df.fillna(0)#用0填补df['age'].fillna(df['age'].mean())#用平均值填补缺失值df['age'].fillna(df.groupby('gender')['age'].transform('mean'),inplace=True)#根据各性别平均年龄填补缺失值df.fillna(method='pad')#用前向后填补缺失值(pad或者ffill)df.fillna(method='bfill',limit=2)#用后向前填补缺失值(bfill或者backfill)缺失值检测与处理插值法填补缺失值:interpolate()Series和DataFrame对象都有interpolate()方法,默认情况下,该函数在缺失值处执行线性插值。这个方法是利用数学方法来估计缺失点的值,对于较大的数据非常有用。插值就是在已知数据之间计算估计值的过程,是一种实用的数值方法,是函数逼近的重要方法。在信号处理和图形分析中,插值运算的应用较为广泛。重复值检测与处理重复值检测duplicated():用于标记Pandas对象的数据是否重复,重复则标记为True,不重复则标记为False,该方法返回一个由布尔值组成的Series对象,它的行索引保持不变,数据则变为标记的布尔值。所有列作为依据进行查找的,每一列的值都必须一致才会被标记为重复值。案例df[df.duplicated()]#筛选出重复行df[df.duplicated()==False]#筛选出非重复行重复值检测与处理重复值处理删除重复值案例df.drop_duplicates()#删除重复值df.drop_duplicates(['sex','year'],keep='last')#keep='last'参数就是让系统从后向前开始筛查,这样索引小的重复行会返回'True‘替换值案例df.replace('','不详')

异常值检测与处理异常值:是指样本中的个别值,其数值明显偏离它所属样本的其余观测值,这些数值是不合理的或错误的。要想确认一组数据中是否有异常值,则常用的检测方法:3σ原则(拉依达准则)箱形图3σ原则(拉依达准则)

根据正态分布函数图可知,3σ原则在各个区间所占的概率如下所示:(1)数值分布在(μ-σ,μ+σ)中的概率为0.682。(2)数值分布在(μ-2σ,μ+2σ)中的概率为0.954。(3)数值分布在(μ-3σ,μ+3σ)中的概率为0.997。σ=np.sqrt((np.square((x-x.mean()))).mean())箱形图箱形图是一种用作显示一组数据分散情况的统计图,离散点表示的是异常值。小结数据清洗概述缺失值检测与处理重复值检测与处理异常值检测与处理第六章使用pandas进行数据清洗和整理

任务6.2数据合并和连接concat合并append合并merge连接join连接combine_first和combine填充合并concat合并使用某种合并方式(inner/outer)沿着某个轴向(axis=0/1)将多个对象进行堆叠把多个Pandas对象(DataFrame/Series)合并成一个concat合并pandas.concat(objs,axis=0,join='outer',‘join_axes=None’,ignore_index=False,‘keys=None’)objs:一个列表,要进行拼接的pandas对象,可以是DataFrame或者Series,可以混合axis:指定对象按照那个轴进行拼接,默认为0(纵向拼接),1为横向拼接join:拼接的方式,inner为交集,outer为并集join_axes:index的列表,仅在横向合并时使用,指明要将数据合并入哪个原表的indexignore_index:如果设置为true,则无视表原来的轴标签,合并后生成新的轴标签keys:表标识的列表,用来区分合并的表来自哪里concat合并-按行pd.concat(frames):默认参数的concat,按行合并,参数为axis=0、join=outer、ignore_index=Falseconcat合并-按行pd.concat(frames,keys=['x','y','z'])使用keys标识表concat合并-按列pd.concat([df1,df4],axis=1)按列合并,axis=1pd.concat([df1,df4],axis=1,join='inner')#按行索引相同合并列append合并append语法:DataFrame.append(other,ignore_index=False)append只有按行合并,没有按列合并,相当于concat按行的简写形式other:单个dataframe、series、dict,或者列表ignore_index:是否忽略掉原来的数据索引merge连接Pandas的Merge,相当于Sql的Join,将不同的表按key关联到一个表。merge的语法:pd.merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True,suffixes=('x','y'),copy=True,indicator=False,validate=None)left,right:要连接的dataframe或者Serieshow:join类型,'left','right','outer','inner'on:join的key,left和right都需要有这个keyleft_on:left的df或者series的keyright_on:right的df或者seires的keyleft_index,right_index:使用index而不是普通的column做joinsuffixes:两个元素的后缀,如果列有重名,自动添加后缀,默认是('x','y')

merge连接pd.merge(left,right,on='key')默认等值连接,左边和右边的key都有,才会出现在结果里merge连接pd.merge(left,right,on=['key1','key2'])#多个关键字等值连接,默认how=‘inner’merge连接pd.merge(left,right,how='left',on=['key1','key2'])#左边的都会出现在结果里,右边的如果无法匹配则为Nullmerge连接pd.merge(left,right,how='right',on=['key1','key2'])右边的都会出现在结果里,左边的如果无法匹配则为Nullmerge连接pd.merge(left,right,how='outer',on=['key1','key2'])#左边、右边的都会出现在结果里,如果无法匹配则为Nulljoin连接默认行索引匹配连接,

merge()默认是列索引匹配连接。用法:join()方法能够通过索引或指定列来连接多个DataFrame对象,它默认以index作为对齐的列。join()和merge()一样,是横向拼接,只能进行数据匹配,即添加列,不能添加行,并且支持how的四种模式:inner,left,right,outer。其实join()就是merge()的一种封装,后台调用的正是merge()。只是为了调用更为简单,才有了join()。语法:join(other,on=None,how='left',lsuffix='',rsuffix='',sort=False)

how:和merge中的how参数一样,用来指定表合并保留数据的规则,匹配到的内容不存在,则用NaN填充。

on:在实际应用中如果右表的索引值正是左表的某一列的值,这时可以通过将右表的索引和左表的列对齐合并这样灵活的方式进行合并。

sort:根据连接键对合并的数据进行排序,默认为False。理解leftjoin、rightjoin、innerjoin、outerjoin的区别join连接Joiningonindex(默认是基于索引连接的)常先设置两表的index列。left.join(right,how='inner')#等价pd.merge(left,right,left_index=True,right_index=True,how='inner')join连接Joiningleftkeycolumnsonanrightindex(左边列与右边索引连接)left.join(right,on='key')#left的key列和right的行索引连接,key必须是左边列#等价pd.merge(left,right,left_on='key',right_index=True,how='left',sort=False)join连接如何实现两个df的列连接呢?两种方法列连接,需要把两个df列转换成行索引df.set_index('key').join(other.set_index('key'))列连接,需要把other的列转换成行索引,key必须是df的列df.join(other.set_index('key'),on='key',how='inner')combine_firstbine_first(df2)填充空值规则是与null值的元素在同一位置等,同一位置指行列索引值一致。通过在df1中使用df2的非null值填充空值来组合两个DataFrame对象,函数返回的DataFrame的行索引和列索引将是两者的并集。如果df1中数据非空,则结果保留df1中的数据,如果df1中的数据为空值且传入combine_first()方法的df2中数据非空,则结果取df2中的数据,如果df1和df2中的数据都为空值,则结果保留df1中的空值。combine_firstcombine填充合并bine(df2,func,fill_value,

overwrite=True):df1基于传递的函数执行与df2的逐列组合。使用func将df1与df2组合到按元素组合的列。生成的DataFrame的行索引和列索引将是两者的并集。func函数的入参是两个Series,分别来自两个DataFrame(将DataFrame按列遍历),返回结果是一个合并之后的Series,在函数中实现合并的规则。combine填充合并fill_value:在将列传递给合并函数之前,先用fill_value填充df1、df2中所有列的值,再按传入的函数进行合并操作。overwrite=False,不处理缺少的列,缺少指df1中有而df2中没有该列,df1中A列原样返回小结df1.concat(df2):机械地行或列堆叠数据。df1.append(df2):只有按行合并,没有按列合并,相当于concat按行的简写形式。df1.merge(df2):适合处理列的连接。df1.join(df2):适合处理行索引的连接。df.set_index()、df.reset_index()、df.T可以进行df行列的转换,因此merge和join方法其实用一种就可以了。bine_first(df2):df2填充df1空值,规则是与null值的元素在同一位置,函数返回的df的行索引和列索引将是两者的并集。bine(df2):可以自定义合并的规则。当需要合并两个相似的数据集,且两个数据集里的数据各有一部分是目标数据时,很适合使用该方法。例如df1中的数据比df2中的数据多,但df1中的部分数据质量不如df2中的高,就可以使用该方法。第六章使用pandas进行数据清洗和整理

任务6.3数据重塑数据重塑pivotpivot_tablestack、unstack数据重塑数据重塑:将列式数据变成二维交叉形式,便于分析,叫做数据重塑或数据透视。数据重塑理解:数据的重塑简单说就是对原数据进行变形。对数据的重塑不是仅改变形状那么简单,在变形过程中,数据的内在数据意义不能变化,但数据的提示逻辑则发生了重大的改变。pivotPivot:将原始DataFrame重塑,返回一个新的DataFrame。代码含义:唯一化处理foo列值最为index,以bar列中的值A、B和C来作为列名,展示DataFrame中baz列数据。pivot语法:df.pivot(index=None,columns=None,values=None),指定index、columns、values实现二维透视。index:指定一个或多个列的值作为新DataFrame的index,会自动唯一化处理,注意其最终值不可以重复,否则报错(可选,若不填则使用现有index)columns:指定一个或多个列的值作为新DataFrame的列values:指定一个或多列的值作为新DataFrame的值(可选,若不填则使用所有剩余列,并且结果将具有按层次结构索引的列)pivot_tablepivot_table:用pivot只能对数据进行变形整理,有时还需要做聚合分析。pivot_table功能比pivot/groupby函数更为完善,除了可以处理重复值,关键在于引入了多层索引。piovt_table制表完成之后返回的是DataFrame,非常方便下一步使用,比如基于pandas画图。类似Excel的高级数据透视功能。#字典传入多列的汇总#aggfun指定汇总的处理方式,默认是求均值#列表传入多种汇总方式table=pd.pivot_table(df,index=['A','C'],values=['D','E'],aggfunc={'D':np.mean,'E':[np.min,np.max,np.mean]})tablepivot_table画条形图barchart:分类汇总可以很好地展示数据,pivot_table函数也可以,因其返回的是一个多层索引的DataFrame。table.plot.bar(y=['D','E'],rot=45,figsize=(16,10),fontsize=(20))stack、unstackstack:将dataframe中的列旋转为行,默认将最内层(level=-1)列索引旋转变成最内层行索引。unstack:将dataframe中行旋转为列,默认将最内层(level=-1)的行索引旋转变成最内存列索引。stack和unstack默认旋转轴的级别为最低级别(即最内层,level=-1)stack、unstackDataFrame.stack(level=-1,dropna=True),将column变成index。level=-1代表多层索引的最内层,可以通过level指定哪一层(或列表表达的哪若干层)的列索引旋转成行索引。df2.stack()==df2.stack(0),这里df2的列索引只有一层,所以最内层就是level==0df2.stack()==df2.stack(-1)stack、unstackDataFrame.unstack(level=-1,fill_value=None),将index变成columnstacked.unstack()==stacked.unstack(2),stacked的行索引有3层,最内层level=2stacked.unstack()==stacked.unstack(-1)stack、unstack请注意,stack和unstack方法隐式地对涉及的索引进行排序。因此,调用stack然后取消stack,或反之亦然,将生成原始数据帧或序列的按索引已排序副本。小结数据重塑pivotpivot_tablestack、unstack第六章使用pandas进行数据清洗和整理

任务6.4字符串处理str介绍获取Series.str或Index.str,然后使用各种字符串处理函数向量化处理数据str处理的链式操作pandas常见字符串处理函数使用str的startswith、contains等bool的Series做条件查询使用正则表达式str介绍str简介:Series和Index包含一些列的字符操作方法,这可以使我们轻易操作数组中的各个元素。最重要的是,这些方

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论