Pandas(数据规整:聚合、合并和重塑)

在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析,应采用聚合、合并、重塑数据的方法进行处理。

层次化索引

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

层次化索引
根据索引取内容

“内层”中进行选取

内层选取

unstack的逆运算是stack

stack

对于一个DataFrame,每条轴都可以有分层索引

DataFrame各轴的分层索引

有了部分列索引,因此可以轻松选取列分组

选取分组

重排与分级排序

调整某条轴上各级别的顺序

交换

而sort_index则根据单个级别中的值对数据进行排序。交换级别时,常常也会用到 sort_index,这样最终结果就是按照指定顺序进行字母排序了。

排序

根据级别汇总统计

对DataFrame和Series的描述和汇总统计都有一个level选项,它用于指定在某条轴上求和的级别。

指定求和级别

使用DataFrame的列进行索引

将DataFrame的一个或多个列当做行索引来用,或者可能希望将行索引变成DataFrame的列

将行索引变为列

默认情况下,那些列会从DataFrame中移除,但也可以将其保留下来(drop=False)

阻止默认删除行为

reset_index的功能跟set_index刚好相反,层次化索引的级别会被转移到列里面

逆层次化索引

合并数据集

pandas对象中的数据可以通过一些方式进行合并
pandas.merge可根据一个或多个键将不同DataFrame中的行连接起来。SQL或其他关系型数据库的用户对此应该会比较熟悉,因为它实现的就是数据库的join操作。
pandas.concat可以沿着一条轴将多个对象堆叠到一起。
实例方法combine_first可以将重复数据拼接在一起,用一个对象中的值填充另一个对象中的缺失值。

数据库风格的DataFrame合并

数据集的合并(merge)或连接(join)运算是通过一个或多个键将行连接起来的。

数据准备

这是一种多对一的合并

多对一合并

没有指明要用哪个列进行连接。如果没有指定,merge就会将重叠列的列名当做键。最好明确指定一下。

明确连接键

如果两个对象的列名不同,也可以分别进行指定。

列名不同分别指定

结果里面c和d以及与之相关的数据消失了。默认情况下,merge做的是“内连接”;结果中的键是交集。其他方式还有”left”、”right”以及”outer”。外连接求取的是键的并集,组合了左连接和右连接的效果。连接方式

外连接

多表连接选项及说明

选项 说明
inner 使用两个表中共同拥有的键
left 使用左表中所有的键
right 使用右表中所有的键
outer 使用两个表中所有的键

多对多的合并

左连接的合并方式

多对多连接,由于左边的DataFrame有3个”b”行,右边的有2个,所以最终结果中就有6 个”b”。

内连接

根据多个键进行合并

多键全连接

重复列名的处理

处理重复列名

索引上的合并

连接键位于其索引中。在这种情况下,你可以传入left_index=True或right_index=True(或两个都传)以说明索引应该被用作连接键。

索引做连接键

层次化索引的数据, 索引的合并默认是多键合并

数据准备

必须以列表的形式指明用作合并键的多个列(注意用how=‘outer’对重复索引值的处理)

全连接处理重复索引

同时使用合并双方的索引

使用双方索引

join实例方法,能实现按索引合并

索引合并

向join传入一组DataFrame

传入DataFrame

轴向连接

数据合并运算也被称作连接(concatenation)、绑定(binding)或堆叠(stacking)

连接实例

pandas的concat函数合并操作

数据准备

调用concat可以将值和索引粘合在一起

索引粘合

传入axis=1,则结果就会变成一个DataFrame(axis=1是列)

传参粘合
指定连接后显示的内容

参与连接的片段在结果中区分不开。假设你想要在连接轴上创建一个层次化索引。使用keys参数即可达到这个目的。

创建层次化索引

如果沿着axis=1对Series进行合并,则keys就会成为DataFrame的列头。

keys的应用
多层应用

用names参数命名创建的轴级别

命名轴级别

DataFrame的行索引不包含任何相关数据, 传入ignore_index=True

合并之后自动生成索引

合并重叠数据

索引全部或部分重叠的两个数据集

索引数据集

此语句实现一样的功能

另一种实现方法

对于DataFrame,combine_first自然也会在列上做同样的事情,因此你可以将其看做:用传递对象中的数据为调用对象的缺失数据“打补丁”。

为缺失数据打补丁

重塑和轴向旋转

用于重新排列表格型数据的基础运算。这些函数也称作重塑(reshape)或轴向旋转(pivot) 运算。

重塑层次化索引
stack:将数据的列“旋转”为行u
nstack:将数据的行“旋转”为列

数据准备

对该数据使用stack方法即可将列转换为行,得到一个Series。

列化为索引

对于一个层次化索引的Series,你可以用unstack将其重排为一个DataFrame:

索引还原为列

默认情况下,unstack操作的是最内层(stack也是如此)。传入分层级别的编号或名称即可对其它级别进行unstack操作。

指定转换级别

将“长格式”旋转为“宽格式”

多个时间序列数据通常是以所谓的“长格式”(long)或“堆叠格式”(stacked)存储在数据库和CSV中的。我们先加载一些示例数据,做一些时间序列规整和数据清洗。

加载示例数据

不同的item值分别形成一列,date列中的时间戳则用作索引

指定索引
查看当前格式

如果忽略最后一个参数,得到的DataFrame就会带有层次化的列

完成转换

将“宽格式”旋转为“长格式”

数据准备

当使用pandas.melt,我们必须指明哪些列是分组指标。下面使用key作为唯一的分组指标。

宽转长

使用pivot,可以重塑回原来的样子

塑原

因为pivot的结果从列创建了一个索引,用作行标签,我们可以使用reset_index将数据移回列

将索引填回列

指定列的子集,作为值的列

使指定列的子集作为值的列

pandas.melt也可以不用分组指标

缺省分组指标
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容