andas是python中最重要的数据分析库之一。它提供了很多功能和方法来高效地处理和分析数据。pandas如此受欢迎的原因在于其简洁、灵活和强大的语法。本文将通过示例解释20个重要的pandas函数。其中有一些是非常常用的,相信大家可能都用过。还有一些函数出现频率较低,但对分析数据也很有用。在介绍这些功能之前,首先要导入pandas和numpy。importnumpyasnpimportpandasaspd1.QueryQuery是pandas的过滤查询函数,使用布尔表达式对DataFrame的列进行查询,即按照列的规则进行过滤操作。用法:pandas.DataFrame.query(self,expr,inplace=False,**kwargs)参数作用:expr:要求值的查询字符串;inplace=False:查询是否应该修改数据或返回修改后的副本kwargs:dict关键字参数首先生成一个df:values_1=np.random.randint(10,size=10)values_2=np.random.randint(10,size=10)years=np.arange(2010,2020)groups=['A','A','B','A','B','B','C','A','C','C']df=pd.DataFrame({'group':groups,'year':years,'value_1':values_1,'value_2':values_2})df过滤查询使用比较简单,例如,查看列value_1=2016的行记录:df.query('year>=2016')2.InsertInsert用于插入DataFrame指定位置的新数据列。默认情况下,新列在末尾添加,但可以更改位置参数以在任何位置添加新列。用法:Dataframe.insert(loc,column,value,allow_duplicates=False)参数功能:loc:int类型,表示插入位置在哪一列;如果在第一列插入数据,则loc=0column:插入名称的列,如column='newcolumn'value:新列的值,数字,数组,系列等allow_duplicates:是否允许重复columnnames,选择True允许新的列名与现有的列名重复然后Usethepreviousdf:insertanewcolumnatthethirdcolumnposition:#Thevalueofthenewcolumnnew_col=np.random.randn(10)#在第三列位置插入新列,从0开始df.insert(2,'new_col',new_col)df3.CumsumCumsum是pandas的累加函数,用于计算列的累加值。用法:DataFrame.cumsum(axis=None,skipna=True,args,kwargs)参数功能:axis:索引或轴的名称skipna:排除NA/空值以前面的df为例,分组列有A,B,C三组,年份栏有多个年份。我们只知道当年的value_1和value_2的值。现在我们可以用cumsum函数求group组下的累计值,比如A和2014年之前的累计值。当然,只用cumsum函数是没法区分组(A,B,C)的,所以需要结合分组函数groupby分别累加(A,B,C)的值。df['cumsum_2']=df[['value_2','group']].groupby('group').cumsum()df4。SampleSample用于从DataFrame中随机选择若干行或几列。用法:DataFrame.sample(n=None,frac=None,replace=False,weights=None,random_state=None,axis=None)参数作用:(1)n:提取的行数(2)frac:extractrows比如frac=0.8就是提取其中的80%(3)replace:是否有放回抽样,True:有放回抽样False:无放回抽样(4)weights:字符索引或者概率数组(5)random_state:随机数生成器seed(6)axis:选择提取数据的行或列axis=0:提取行axis=1:提取列例如要从df中随机提取5行:sample1=df.sample(n=5)sample1从df中随机选取60%的行,并设置随机数种子,这样每次都可以抽取相同的样本:sample2=df.sample(frac=0.6,random_state=2)sample25。WhereWhere用于根据条件值替换行或列。如果满足条件,则保留原值,如果不满足条件,则替换为其他值。默认替换为NaN,也可以指定特殊值。用法:DataFrame.where(cond,other=nan,inplace=False,axis=None,level=None,errors='raise',try_cast=False,raise_on_error=None)参数作用:cond:布尔条件,如果cond为真,保留原值,否则替换为其他other:替换inplace的特殊值:如果inplace为true,则对原始数据进行操作,如果为false,则对原始数据的副本进行操作。值替换为0:df['value_1'].where(df['value_1']>5,0)其中是掩码操作。掩码(英文:Mask)是指计算机科学和数字逻辑中的一串二进制数。通过对目标数进行位运算,可以屏蔽掉指定的位来满足要求。6、IsinIsin也是一种过滤方法,用于检查某列中是否包含某个字符串,返回值是一个BooleanSeries,表示每一行的情况。用法:Series.isin(values)或DataFrame.isin(values)过滤df中year列值在['2010','2014','2017']的行:years=['2010','2014','2017']df[df.year.isin(years)]7.Loc和ilocLoc和iloc通常用于选择行和列。它们的功能相似,但用法不同。Usage:years=['2010','2014','2017']df[df.year.isin(years)]loc:按标签选择行和列(列和索引)iloc:按索引位置选择行和列选择df的1~3行1~2列的数据,使用iloc:df.iloc[:3,:2]useloc:df.loc[:2,['group','year']]1提示:使用loc时,索引指的是索引值,包括上界。iloc索引指的是行的位置,不包括上限。选择第1、3、5行,列year和value_1:df.loc[[1,3,5],['year','value_1']]8.pct_changePct_change是一个统计函数,用来表示当前元素和前一个元素的差异百分比,两个元素之间的间隔可以调整。比如给定三个元素[2,3,6],计算百分比差后得到[NaN,0.5,1.0],从第一个元素到第二个元素增加50%,从第二个元素到第三个元素增加50%元素增加100%。Usage:DataFrame.pct_change(periods=1,fill_method='pad',limit=None,freq=None,**kwargs)参数功能:periods:interval区间,即步长fill_method:处理null的方法valuesforvalue_1ofdf计算列的增长率:df.value_1.pct_change()9.RankRank是排序函数,将原序列的值按照规则(从大到小,从从小到大),并返回排名位置。比如有一个序列[1,7,5,3],使用rank从小到大排序后,返回[1,4,3,2],即前一个序列的每个值的排序位置。用法:rank(axis=0,method:str='average',numeric_only:Union[bool,NoneType]=None,na_option:str='keep',ascending:bool=True,pct:bool=False)参数功能:(1)axis:roworcolumn(2)method:返回排名的方式,可选{'average','min','max','first','dense'}method=average默认设置:相同value占前两位,分不清谁是1谁是2,然后去中位数,也就是1.5,下一个就是第三种方法=max:两人并列第二,andnextpersonisthirdplacemethod=min:两个人并列第一,下一个人是第三名method=dense:两个人并列第一,下一个人是第二名method=first:相同的值会按照其在序列中的相对位置设置(3)升序:对df中的列value_1进行正序和反序排列:df['rank_1']=df['value_1'].rank()df10.MeltMelt用于将宽表变窄表,是一个pivot透视的逆运算函数,将列名转换为列数据(列名→列值),重构DataFrame。简单点说就是把指定的列放在行上变成两列,类别是变量(可以指定)列,值是值(可以指定)列。用法:pandas.melt(frame,id_vars=None,value_vars=None,var_name=None,value_name='value',col_level=None)参数作用:frame:指DataFrameid_vars[tuple,listorndarray,optional]:不需要转换的列的名称,引用用作标识符变量的列如果未指定,则使用所有未设置为id_vars的列var_name[标量]:指用于“变量”列的名称。IfNone,use--frame.columns.nameor'variable'value_name[scalar,default'value']:指的是用于'value'列的名称col_level[intorstring,optional]:如果column为MultiIndex,它会使用这个级别来融化,例如,代表不同城市和每日人口流动的一串数据:importpandasaspddf1=pd.DataFrame({'city':{0:'a',1:'b',2:'c'},'day1':{0:1,1:3,2:5},'day2':{0:2,1:4,2:6}})df1现在将更改day1和day2列进入一个变量列,加上一个值列:pd.melt(df1,id_vars=['city'])