pandas深入学习-高阶函数

一、转置:T函数

df.T

二、排序:sort函数

数据框排序:

df.sort_values(by = '编号')

数组排序:

df.编号.sort_values()  ##区别:这个只显示对应列

降序:(默认是升序)

df.sort_values(by = '编号',ascending = False)

多列排序:

df.sort_values(['编号','网站情况'] ,ascending = False)

三、排名赋值:rank函数

df['rank']=df.编号.rank()

有一个特殊情况: 数值一样的话,排名可以按照不同的方式排列,可以在method参数配置不同的值

df['rank']=df.编号.rank(method='min')

min表示最小值,也是我们日常见到的

max最大值

默认是平均值

first不考虑并列情况,按照顺序排序

四、查重复值:unique函数,结果显示的唯一值

针对的是数组级别

df.网站情况.unique()

五、对重复计数value_counts()

针对的是数组级别

df.网站情况.value_counts()

六、描述统计describe()

针对数值

df.describe()

指定某一列

df.编号.describe()

所以还可以是这样的函数,min,max,mean

df.max()

分析师好的习惯,拿到数据:

df.info()→df.head()→df.describe()

七、累加函数cumsum()

这个函数的功能是返回给定axis上的累计和

df['cumsum']=df.编号.cumsum()

八、分段函数cut(),按照指分

df['cut']=pd.cut(df.编号,bins=4,labels=list('abcd'))

bins代表等分个数,labels表示别名,比如20-30岁少年

###不等分:

df['bin']=pd.cut(df.编号,bins=[0,500,1000,2000])

分为法分段函数pd.qcut(),按照排名分

数据聚合(与sql中的group by类似)

一、groupby()

###max()最大值,还可以是avg等

df.groupby(by = '网站情况').max()

###指定某列:

df.groupby(by = '网站情况').编号.max()

###多个字段分组,结果是多重索引

df.groupby(by = ['网站情况','名称']).编号.max()

###k[0],k[1]分别表示元组和数据框

for k in df.groupby(by = '网站情况'): print(k) 结果是一个元组,每个值是一个数和一个数据框

for k in df.groupby(by = '网站情况'): print(k[1])

###分组后最大值与最小值的差值

for k,v in df.groupby(by = '网站情况'):

        print(max(v.编号)-min(v.编号))

多表关联

三种关联函数

一、concat(类似于堆叠,类似于sql 的union)

应用场景:表1:1月份销售明细;表2:2月份销售明细,则可以进行拼接

参数:objs是[a,b]

axis=1 是左右拼接,默认为0是上下拼接

两张表放在一起,字段合并

二、join(针对的是索引)

如果是针对的某一列关联,用merge

多表索引不一致,关联后数据错误,一般用在时间索引等

三、merge(根据介质,也就是某一列)

1、直接数据框使用merge

df.merge()

right是右边,on参数是当两张表的关键字段名一样时,当两张表关联字段名不一样时使用right_on=,left_on

2、pd.merge()

这里多出来一个left参数

多重索引

一、groupby的多重索引切片

关键点:serise级别可以直接输入索引标签进行切片查询

###第一步得出来是数据框形式

df.groupby(by = ['网站情况','编号']).mean()

###第二步等出来结果是Serise

df.groupby(by = ['网站情况','编号']).mean().rank

###第三步对Serise形式数据进行筛选

df.groupby(by = ['网站情况','编号']).mean().rank ['未嵌码']

注意:数据框下多重索引需要使用loc

df.groupby(by = ['网站情况','编号']).mean().loc['网站打不开']

二、多重索引的变化

1、set_index():列名变成索引

df.sort_values(by=['网站情况','编号']).set_index(['网站情况','编号'])

2、reset_index()索引变成列

df.groupby(by = ['网站情况','编号']).mean().reset_index(['网站情况','编号'])

文本函数

str()函数

针对的是这个表格进行操作(也就是字符串)

df.网站情况.str[-1,1]

replace()函数也是针对表格的具体值替换

当需要针对值里的某个字符替换时,则还需要套用一个str()函数

df.网站情况.str.replace('未','没有')

去重函数

1、空值填充fillna

某个值为空值
df.loc[df.名称 == '扶贫办','名称'] = np.NaN

###指定某一列的空值填充

df.名称=df.名称.fillna('abc')

###整个数据框的空值填充

df = df.fillna('abc')

2、空值行删除

df.dropna()

3、删除重复元素

###判断是否有重复值

df.duplicated()

###索引每一列是否有重复值

df[df.duplicated()]

###去除重复后的数据框

df[~df.duplicated()]

drop_duplicates() 直接返回数据

apply函数(自定义函数应用到列或者行)

1、对某个列

输入:df.编码的每一行

输出:按照匿名函数lambda x:str(x)+'k'输出

df.编号.apply(lambda x:str(x)+'k')

等价于

def func(x): 

       return str(x)+'k' 

df.编号.apply(func)  

2、对整个数据框:

axis=0表示应用函数多每个列

axis=1表示应用函数多每个行

3、apply应用在聚合函数

不同网站情况编号排名前3的

def func(x):

    r = x.sort_values('编号',ascending=False)     return r[:3]

df.groupby('网站情况').apply(func)

自定义取前几个:

def func(x,n):

    r = x.sort_values('编号',ascending=False)    

    return r[:n]

df.groupby('网站情况').apply(func,n=3)

4、agg函数

df.groupby('网站情况').agg('mean')

等价于

df.groupby('网站情况').mean()

agg可以进行多个函数计算:

df.groupby('网站情况').agg(['mean','sum'])

数据透视表函数pivot_table

df.pivot_table(index= '网站情况',columns='名称',values='编号')

1、某个字段计算某个函数,使用字典:介质对

df.pivot_table(index= '网站情况',columns='名称',values=['编号','序号'],aggfunc={'编号':np.mean,'序号':len})

你可能感兴趣的:(pandas深入学习-高阶函数)