大毛 岂安科技业务风险分析师
多年订单业务反欺诈经验,负责岂安科技多款产品运营工做。mysql
在使用Pandas以前,大多数数据分析师已经掌握了Excel和SQL,而且在刚上手Pandas时会常常习惯性想到“老办法”。"若是谁能把经常使用的数据查询语法作个对比就行了 ",我也曾不止一次地想享受前人的成果,无奈发现网上的文章侧重不一样且深浅不一,还涉及到一些Pandas新老版本的问题,因而决定本身动手。sql
假设我有个六列的dataframe:一列是销售员,一列是所属团队,其它四列分别是四个季度的销售额。函数
首先df['Total ']确保了你在该df内新增了一个column,而后累加即可。学习
df['Total'] = df['Q1']+df['Q2']+df['Q3']+df['Q4']spa
你可能想使用诸如sum()的函数进行这步,很惋惜,sum()方法只能对列进行求和,幸亏它能够帮咱们求出某季度的总销售额。df['Q1'].sum(),你就能获得一个Q1的总销售额,除此以外,其余的聚合函数,max,min,mean都是可行的。3d
那么按团队进行统计呢?在mysql里是group by,Pandas里也不例外,你只须要df.groupby('Team').sum()就能看到指望的答案了。excel
若是你关心谁的整年销售额最多,那么就要求助于sort_values方法了,在excel内是右键筛选,SQL内是一个orderby。默认是顺序排列的,因此要人为设定为False,若是你只想看第一名,只须要在该语句末尾添加.head(1) 。blog
接下来就是涉及一些条件值的问题,例如我只关心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 *的效果。
在Pandas中多条件切片的写法会有些繁琐,df.loc[ (df['Team']== 'A' ) & (df['Total'] > 15000 ) ],添加括号与条件符。
这里有一个有意思的小应用,若是你想给符合某些条件的员工打上优秀的标签,你就能够结合上述新增列和切片两点,进行条件赋值操做。
df.loc[ (df['Team']== 'A' ) & (df['Total'] > 15000 ) , 'Tag'] = 'Good'
固然这里只是个举例,这时候我想删除Tag列,能够del df['Tag'],又回到了以前。
接下来要讲join了,如今有每小时销售员的职位对应表pos,分为Junior和Senior,要将他们按对应关系查到df中。
这里须要认识一下新朋友,merge方法,将两张表做为前两个输入,再定义链接方式和对应键。对应到Excel中是Vlookup,SQL中就是join。在pandas里的链接十分简单。
df = pd.merge(df, pos, how='inner', on='Salesman')
注意,这个时候其实咱们是获得了新的df,若是不想覆盖掉原有的df,你能够在等号左边对结果从新命名。
这时候有了两组标签列(对应数值列),就能够进行多重groupby了。
固然这样的结果并不能公平地反应出哪一组更好,由于每组的组员人数不一样,可能有平均数的参与会显得更合理,而且咱们只想依据整年综合来评价。
这里的数据是捏造的,不过也一目了然了。
最后以最简单的一个合并操做收尾。
若是我又有一批数据df2,须要将两部分数据合并。只须要使用concat方法,而后传一个列表做为参数便可。不过前提是必需要保证他们具备相同类型的列,即便他们结构可能不一样(df2的Team列在末尾,也不会影响concat结果,由于pandas具备自动对齐的功能)。
pd.concat([df,df2])
以上就是一些基础的Pandas数据查询操做了。做为Pandas初学者,若是能善用类比迁移的方法进行学习并进行总结是大有裨益的。若是看完本文尚未能了解到你关心的查询方法,能够留言联系,或许还能够有续集。