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

微信扫一扫,分享到朋友圈

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

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

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

层次化索引

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

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

比如下面这个对象:

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

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

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

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

轴向旋转

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

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

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

数据聚合和分组运算

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

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

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

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

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

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

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

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

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

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

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

往期推荐:

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

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

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

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

微信扫一扫,分享到朋友圈

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

手把手教你使用容器服务 TKE 集群审计排查问题

上一篇

把 Node.js 中的回调转换为 Promise

下一篇

你也可能喜欢

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

长按储存图像,分享给朋友