分享

Python数据分析常用函数及参数详解,可以留着以备不时之需

 excel05 2020-08-15

利用Python进行数据分析最核心的库就是Pandas,可以说,掌握了Pandas库,Python数据分析就属于中阶水平了。

在《一次简单、完整的全流程数据分析,让我们不再害怕Python 》一文中我们介绍了Python进行数据分析全流程的几个主要函数。但由于实际中的分析需求可能比较复杂,就要求对数据做更加复杂的处理。

所以,我们有必要提前准备一些常用的函数,这些函数不用全部会,知道有这些函数,并做到在我们要实现数据处理逻辑时,知道有什么函数可用就够了。

为了便于学习这些函数,本文按照各自类型进行了分门别类。

几点注意事项


在介绍具体的函数时,说几点注意事项:

  • 初学时最好习惯于写参数名称;
  • 根据函数的作用去理解它可以作用于哪种对象,又会返回何种对象;
  • 函数(也就是对象的方法)需要有括号,查看对象属性没有括号。
  • axis=i,表示i维进行变化,而其他维度不变。例如,当i=0时,就是说行维度值进行变化,其它维度不变,这就表明是按列进行处理。

常用函数


为了便于我们掌握,我们结合数据分析的流程和其内部函数的作用,将其分为以下几类,具体见下图。

Python数据分析常用函数及参数详解,可以留着以备不时之需

(1)对象创建

pandas中有两种重要对象:Series和DataFrame。前者类似一维数组,后者可看成Excel中的表格数据。后文将用df表示任意的DataFrame对象,用s表示任意的Series对象,用pd表示pandas库。

df.duplicated(subset=['col'],keep=first) #各行是否是重复行,返回Series,keep参数为first,last,False,first意思是第一次出现的重复值保留。df.drop_duplicates(subset=['col'],keep=first,ignore_index=True) #根据列删除重复行,返回删除后的结果数据df.fillna(value=,inplace=) #用value值填充na,返回填充后的结果数据df.dropna(axis=0,how='any',inplace=False) #axis=0即行,how有‘any’和‘all’两个选项,all表示所有值都为NA才删除df.drop(labels=0,columns=['col1'],axis=0,) #删除指定列,也可以删除行,axis作用不大 df.rename(index={'row1':'A'},columns={'col1':'A1'}) df.replace(to_replace=np.nan,value=0,inplace=False) #替换df值,前后值可以用字典表,{1:‘A', '2':'B'}

(2)数据读取

数据读取重点掌握以下三种。

pd.read_table(filename, sep='\t', header=0, index_col=None,……)#要读取的文件名称是必须输入的参数,其余为可选项,header为要选取哪一行作为列名称,默认第一行pd.read_csv(filename, sep=',', header=0, index_col=None,……) #与上面的函数用法大致相同pd.read_excel(filename,sheet_name=0, header=0,index_col=None,……) #从Excel文件读入数据,增加了sheet_name参数的选项,代表要读取第几个工作表的数据

(3)数据描述

在读完数据后,我们要先查看数据的整体情况。

df.info() #查看数据框基本信息,包含多少行和列,每列什么类型等等df.descirbe() #查看数据的整体描述,统计的是数值型列df.head(n) #查看前ndf.tail(n) #查看后ndf.count(axis=0) #非空值个数,返回Series0为按列统计,1为按行统计df.isna()#返回每个元素是否是缺失值的bool数据框df.isnull()#返回每个元素是否是空值的bool数据框df.columns#返回Index类型的列的集合,因为列名称是属性,所以没有括号df.dtypes#每一列的数据类型df.index#行索引名,返回Index类型的索引的集合df.shape#返回(行数,列数)格式的元组df.values#值的二维数组,返回numpy.ndarray对象s.nunique()#返回唯一值个数s.unique()#唯一值数据,返回array格式

(3)数据筛选

数据筛选的本质无外乎就是根据行和列的特性来选择满足我们需求的数据,掌握这些基本的筛选方法就可以组合复杂的筛选方法。

df['col1']#选择某一列,返回的是Series类型df[['col1']]#选择某一列,返回的是DataFrame类型df[df['col1'] > 1] #选取满足条件的行,df['col']>1返回的还是一个数据框,只是每个值为booldf.query('col1 > 1') #这种方法也可选取满足条件的行df.loc[m:n] #按照行索引选取m~n行,注意是包含ndf.loc[m:n,'col1':'coln']#注意loc函数的参数都是索引名df.iloc[m:n] #获取从m~n-1行,iloc函数代表的是位置,即参数都是数字,代表第几行第几列df.select_dtypes(include=None, exclude=None) #按照数据类型选择列df.isin(values=) #数据框中数据是否存在于values中,返回的是DataFrame类型

(4)数据清洗

数据清洗主要是一些重复值、缺失值和索引名称等问题的处理。

df.duplicated(subset=['col'],keep=first) #各行是否是重复行,返回Series,keep参数为first,last,False,first意思是第一次出现的重复值保留。df.drop_duplicates(subset=['col'],keep=first,ignore_index=True) #根据列删除重复行,返回删除后的结果数据df.fillna(value=,inplace=) #用value值填充na,返回填充后的结果数据df.dropna(axis=0,how='any',inplace=False)#axis=0即行,how有‘any’和‘all’两个选项,all表示所有值都为NA才删除df.drop(labels=0,columns=['col1'],axis=0,) #删除指定列,也可以删除行,axis作用不大 df.rename(index={'row1':'A'},columns={'col1':'A1'}) #重命名行索引和列名称df.replace(to_replace=np.nan,value=0,inplace=False) #替换df值,前后值可以用字典表示,如{'a':‘A', 'b':'B'}df.columns=pd.MultiIndex.from_tuples(indx) #构建层次化索引

(5)数据处理

数据处理的范畴很广,包含数据的统计汇总,也包含数据的转换,做这一块时脑中要同时进行抽象处理,便于查看逻辑是否有错。

pd.merge(df1, df2, on='col1',left_on='col1',right_on='col2',how='inner'sort=False) #how有outer,left,right选项,默认inner,suffixes表示在相同的列名添加后缀pd.concat([df1,df2,df3], axis=0,join='outer',ignore_index=False,keys=['x','y','z'])#按行或是按列拼接多个数据框或Series,axis=0为按列拼接,即增加在行下面,key添加层次化索引df1.append(df2,ignore_index=False)#可为df也可为s,按列添加,即添加行,ignor_index=False意思是都按照原先的行索引值df.stack(level=-1,dropna=True) #列旋转成行,也就是列名变为行索引名,原索引变成多层索引,#level表示选取哪个索引进行转换,-1表示最内层的索引,0表示第一层索引df.unstack(level=-1,fill_value=None) #行转列,默认从最内层索引开始df.pivot_table(index=['col1','col2'],values=['col3'],columns=['col4'],aggfunc='count')#类似于Excel中的数据透视表,index表示选择行,column是选择列,values是进行函数计算的列df.groupby(['col1'])#根据列对数据框进行分组,返回分组对象df.groupby(['col1'])['col2'].count()#表示根据col1列进行分组,统计col2列的行数。这种方式是最为常用的统计汇总方法df.agg({'col1':'count','col2':'sum'},axis=0) #agg是聚合的别名,表示对不同列用不同函数进行统计,返回Series对象df.sort_values(by='col1',axis=0,ascending=True, inplace=False, na_position={'last','first'})#按照某一列对数据框进行排序df.apply(lambda x :x.max()-x.min(),axis=0)#默认参数axis=0,表示按列对数据进行操作df.applymap(lambda x : 1 if x>0 else 0)#对数据框每一个数据进行操作,返回DataFrame格式s.map(lambda x : 1 if x>0 else 0)#对Series的每一个数据进行,不能对DataFrame操作s.value_counts()#对Series中数据进行分类汇总pd.cut(s,bins=[-np.inf,0,np.inf],labels=list('abc')) #bins为左开右闭区间,将Series数据进行分类df.where(df<0,0) #与numpy的where函数有不同,后面的值表示不满足条件的赋值为0,满足的话就不变pd.date_range(start='2020-01-01',end='2020-02-01',periods=,freq='D')#periods为期数,注意不要冲突,freq为类型,种类有很多,默认是天,M为月尾,MS为月初

结语


函数还有很多,但都不太常见了。我们平时学习的时候可以养成记笔记的好习惯,即把出现的函数记下来,分门别类地汇总在一起,等记不清时就可以直接在汇总中查找了,闲暇时也可以瞅一瞅,这样次数多了后就会慢慢全部记住了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多