26

【US分享】使用pandas做类SQL操作

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzU4Mzg4MDU1MA%3D%3D&%3Bmid=2247486883&%3Bidx=1&%3Bsn=d70df2485ca647cacf83087b30c85e70
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

nYjequV.jpg!mobile

上篇文章为大家介绍了pandas的基本特性,常用数据结构以及对应的数据加载,值的获取等基本操作。

这篇文章为大家介绍 DataFrame对象的索引操作,轴向旋转以及数据的聚合与分组运算

层次化索引

层次化索引(hierarchical indexing) 是pandas的一项重要功能,它使你能在一个轴上拥有多个(两个以上)索引级别。

抽象点说,它使你能以低维度形式处理高维度数据。

比如下面这个对象:

FfaIfqv.png!mobile

numpy是一个支持大量的维度数组与矩阵运算的python语言扩展库,通常的引入规则是使用别名np;

frame_m对象具有两层索引,第一层是字母a-d,第二层是数字1-3,使用一层索引可以把该索引对应的一个数列都列出来,使用两层所以可以唯一定位一个DataFrame元素。

DataFrame对象有个unstack函数,该操作可以理解为将DataFrame对象的索引由内向外层层去除展开为列(columns):

NNBbUfu.png!mobile

在上图中,frame_m在调用unstack函数之前是具有2层索引的,调用unstack之后,第二层索引数字1-3被展开成了列,只保留了字母a-d作为索引。stack函数为unstack函数的反向操作。

轴向旋转

pandas使用pivot函数实现轴向旋转功能,这个功能有点像excel的透视表,pvot函数的参数应为DataFrame对象的列名,而非索引,对上篇的体重数据使用pivot函数得到如下效果:

JruyEbn.png!mobile

其中使用day和week分别作为结果的行索引和列索引,weight值填充里面的内容,对于索引data对象里面没有的数据使用NaN填充。(NaN,not a number)

使用fillna函数可以为所有NaN指定一个默认值,同时DataFrame对象自带的T对象代表其转置矩阵:

jqUvuqe.png!mobile

数据聚合和分组运算

对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分析工作中的重要环节。

在将数据集加载、融合、准备好之后,通常就是计算分组统计或生成透视表。

pandas提供了一个灵活高效的gruopby功能,它使你能以一种自然的方式对数据集进行切片、切块、摘要等操作。

第一个阶段,pandas对象(无论是Series、DataFrame还是其他的)中的数据会根据你所提供的一个或多个键被拆分(split)为多组。

拆分操作是在对象的特定轴上执行的。

例如,DataFrame可以在其行(axis=0)或列(axis=1)上进行分组。然后,将一个函数应用(apply)到各个分组并产生一个新值。

最后,所有这些函数的执行结果会被合并(combine)到最终的结果对象中。

结果对象的形式一般取决于数据上所执行的操作。下图说明了一个简单的分组聚合过程:

EJFzIbY.png!mobile

这个过程和MapReduce的Shuffle过程有很多类似之处。

我们可以对frame_d对象的weight列按照week分类进行分组,然后求每个分组下的平均值,得到结果如下:

zUfy2yb.png!mobile

从此份数据可以得出一个常见的结论: 早晨起来称的体重比中午要轻

往期推荐:

【UI分享】你需要了解的函数式动效

【US分享】使用pandas做数据预处理

【UE分享】研究方法分享:桌面研究

【UI分享】Principle,游戏交互原型制作好帮手

MJniumM.jpg!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK