在使用Pandas之前,大部分数据分析师已经掌握了Excel和SQL,刚上手Pandas时往往会习惯性地想到“老办法”。“如果有人可以比较常用的数据查询语法,那就太好了。”版本问题,所以我决定自己做。1.示例数据假设我有一个包含六列的数据框:一列是销售人员,另一列是团队,另外四列是四个季度的销售额。1、添加新列——根据原列的年销售额,首先df['Total']确保你在df中添加一个新列,然后再累加起来。df['Total']=df['Q1']+df['Q2']+df['Q3']+df['Q4']不幸的是,您可能想在此步骤中使用像sum()这样的函数,sum()方法只能对列求和。幸运的是,它可以帮助我们找到某个季度的总销售额。df['Q1'].sum(),可以得到一个Q1的总销售额,另外,其他的聚合函数,max,min,mean都是可行的。2.分组统计-团队赛团队统计呢?在mysql中就是groupby,pandas也不例外。您只需要df.groupby('Team').sum()即可看到预期的答案。3.排序——谁是销售冠军?如果你关心谁的年销售额最多,那么你需要求助于sort_values方法。在excel中是右键筛选,在sql中是orderby。默认是有序的,所以必须人为设置为False。如果只想看到名字,只需在语句末尾添加.head(1)即可。4.切片——只显示我关心的行。接下来是一些条件值的问题。比如我只关心Team是A的数据,在Excel中就是过滤框操作,在SQL中写where就可以了。Pandas需要切片。在查看Pandas文档时,您可能已经看到了各种slice函数,例如loc、iloc、ix和iy,这里不会像教科书一样一一解释,让读者一头雾水。对于根据列值选择行数据的查询操作,推荐使用loc方法。df.loc[df['Team']=='A',['Salesman','Team','Year']],这里用SQL语法理解比较方便,loc里面的逗号可以理解aswhere,逗号后面可以理解为选择字段。如果要全选,只需要把逗号和后面的东西默认去掉,就可以达到select*的效果。5、切片——多条件筛选Pandas中多条件切片的写法会有点繁琐,df.loc[(df['Team']=='A')&(df['Total']>15000)],添加括号和条件。这是一个有趣的小应用程序。如果要将满足一定条件的员工标记为优秀,可以结合以上加列和切片两点进行条件赋值操作。df.loc[(df['Team']=='A')&(df['Total']>15000),'Tag']='Good'6.删除列——与查询无关,但对查询有用当然这只是一个例子。这时候如果我想删除Tag列,可以deldf['Tag']返回到上一个。2.Connection下面说说join。现在有一个表pos对应钟点业务员的职位,分为Junior和Senior。需要根据对应关系将它们签入df。这里需要结识新朋友,merge方法以两个表作为前两个输入,然后定义连接方式和对应的key。对应Excel中的Vlookup,SQL中的join。pandas中的连接非常简单。df=pd.merge(df,pos,how='inner',on='Salesman')注意,此时我们实际上得到了一个新的df。如果不想覆盖原来的df,可以将等号左边的结果重命名。这时候有了两组标签列(对应数值列),就可以进行多次groupby了。当然,这样的结果并不能公平的反映出哪个组更好,因为每个组的成员数量不同,平均参与人数可能更合理,我们只想根据整体的结果来评价全年。这里的数据是捏造的,但也一目了然。3.合并操作***以最简单的合并操作结束。如果我还有另一批数据df2,我需要合并这两部分数据。只需使用concat方法并将列表作为参数传递即可。但是前提是他们必须有相同类型的列,即使他们的结构可能不同(df2的Team列在最后,不会影响concat的结果,因为pandas有自动对齐的功能).pd.concat([df,df2])四、结束以上是一些基本的Pandas数据查询操作。作为Pandas的初学者,如果能善用类比迁移的方法来学习和总结,是大有裨益的。如果看完本文后,您对您关心的查询方式还有不明白的地方,可以留言联系,说不定还会有续集。【本文为栏目组织《奇安科技》原创文章,转载请微信公众号(bigsec)联系原作者】点此查看更多本作者好文
