在使用Pandas之前,大多数数据分析师已经掌握了Excel和SQL,并且在刚上手Pandas时会经常习惯性想到“老办法”。"如果谁能把常用的数据查询语法做个对比就好了 ",我也曾不止一次地想享受前人的成果,无奈发现网上的文章侧重不同且深浅不一,还涉及到一些Pandas新老版本的问题,于是决定自己动手。
想要学习Python?Python学习交流群:984632579满足你的需求,资料都已经上传群文件,可以自行下载!
一、举例的数据
假设我有个六列的dataframe:一列是销售员,一列是所属团队,其它四列分别是四个季度的销售额。
1新增列-基于原有列的全年销售额
首先df['Total ']确保了你在该df内新增了一个column,然后累加便可。
df['Total'] = df['Q1']+df['Q2']+df['Q3']+df['Q4']
你可能想使用诸如sum()的函数进行这步,很可惜,sum()方法只能对列进行求和,幸好它可以帮我们求出某季度的总销售额。df['Q1'].sum(),你就能得到一个Q1的总销售额,除此之外,其他的聚合函数,max,min,mean都是可行的。
2分组统计 - 团队竞赛
那么按团队进行统计呢?在mysql里是group by,Pandas里也不例外,你只需要df.groupby('Team').sum()就能看到期望的答案了。
3排序 - 谁是销售冠军
如果你关心谁的全年销售额最多,那么就要求助于sort_values方法了,在excel内是右键筛选,SQL内是一个orderby。默认是顺序排列的,所以要人为设定为False,如果你只想看第一名,只需要在该语句末尾添加.head(1) 。
5切片-只给我看我关心的行
接下来就是涉及一些条件值的问题,例如我只关心Team为A的数据,在Excel里是筛选框操作,在SQL里写个where就能搞定,在Pandas里需要做切片。
查看Pandas文档时,你可能已经见过各种切片的函数了,有loc,iloc,ix,iy,这里不会像教科书一样所有都讲一通让读者搞混。这种根据列值选取行数据的查询操作,推荐使用loc方法。
df.loc[df['Team']== 'A',['Salesman', 'Team','Year']],这里用SQL语法理解更方便,loc内部逗号前面可以理解为where,逗号后可以理解为select的字段。
如果想全选出,那么只需将逗号连带后面的东西删除作为缺省,即可达到select *的效果。
6切片 - 多条件筛选
在Pandas中多条件切片的写法会有些繁琐,df.loc[ (df['Team']== 'A' ) & (df['Total'] > 15000 ) ],添加括号与条件符。
这里有一个有意思的小应用,如果你想给符合某些条件的员工打上优秀的标签,你就可以结合上述新增列和切片两点,进行条件赋值操作。
df.loc[ (df['Team']== 'A' ) & (df['Total'] > 15000 ) , 'Tag'] = 'Good'
7删除列 - 和查询无关,但是很有用
当然这里只是个举例,这时候我想删除Tag列,可以del df['Tag'],又回到了之前。