《利用Python进行数据分析》学习笔记 第8章 数据规整:聚合、合并和重塑

第8章 数据规整:聚合、合并和重塑

8.1 层次化索引

常见的数据层次化结构有两种,一种是表格,一种是“花括号”,表格在行列方向上均有索引(类似于DataFrame),花括号结构只有“列方向”上的索引(类似于层次化的Series),结构更加偏向于(Series-stack,方便记忆)。stack函数会将数据从“表格结构”变成“花括号结构”,即将其行索引变成列索引,反之,unstack函数将数据从“花括号结构”变成“表格结构”,即要将其中一层的列索引变成行索引。

  • 重排与分级排序

swaplevel接受两个级别编号或名称,并返回一个互换了级别的新对象(但数据不会发生变化)。

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

  • 根据级别汇总统计

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

  • 使用DataFrame的列进行索引

DataFrame的set_index函数会将其一个或多个列转换为行索引,并创建一个新的DataFrame。默认情况下,那些列会从DataFrame中移除,用drop=False可以将其保留下来。

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

 

8.2 合并数据集

pandas.merge可根据一个或多个键将不同DataFrame中的行连接起来。SQL或其他关系型数据库的用户对此应该会比较熟悉,因为它实现的就是数据库的join操作。

pandas.concat可以沿着一条轴将多个对象堆叠到一起。

实例方法combine_first可以将重复数据拼接在一起,用一个对象中的值填充另一个对象中的缺失值。

  • 数据库风格的DataFrame合并

merge做的是“内连接”,结果中的键是交集。其它方式还有”left”,”right”,”outer”。外链接求取的是键的并集,组合了左连接和右连接的效果。 

《利用Python进行数据分析》学习笔记 第8章 数据规整:聚合、合并和重塑

  • 多对多合并 

《利用Python进行数据分析》学习笔记 第8章 数据规整:聚合、合并和重塑

merge有一个suffixes选项,用于指定附加的左右两个DataFrame对象的重叠列名上的字符串: 

《利用Python进行数据分析》学习笔记 第8章 数据规整:聚合、合并和重塑

  • merge函数的参数:  

《利用Python进行数据分析》学习笔记 第8章 数据规整:聚合、合并和重塑

《利用Python进行数据分析》学习笔记 第8章 数据规整:聚合、合并和重塑

  • 索引上的合并

DataFrame中的连接键位于其索引时,可传入left_index=True或right_index=True(或两个都传)以说明索引应该被用作连接键。

DataFrame的join方法默认使用的是左连接,保留左边表的行索引。

  • 轴向连接

NumPy的concatenation函数可以用NumPy数组来做数据合并运算(concatenation,binding,stacking)

在连接轴上创建一个层次化索引,使用keys参数: 

《利用Python进行数据分析》学习笔记 第8章 数据规整:聚合、合并和重塑

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

《利用Python进行数据分析》学习笔记 第8章 数据规整:聚合、合并和重塑

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

《利用Python进行数据分析》学习笔记 第8章 数据规整:聚合、合并和重塑

  • 合并重叠数据

若索引全部或部分重叠的两个数据集,使用NumPy的where函数,它表示一种等价于面向数组的if-else: 

《利用Python进行数据分析》学习笔记 第8章 数据规整:聚合、合并和重塑

Series有一个combine_first方法,实现上述功能并带有数据对齐:

8.3 重塑和轴向旋转

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

Pandas.DataFrame.pivot有三个参数,第一个index是重塑的新表的索引名称是什么,第二个columns是重塑放入新表的列名称是什么,一般来说就是被通缉列的分组,第三个values就是生成新列的值应该是多少,若没有,则会对data_df剩下未统计的列进行重新排列放到columns的上层。

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

旋转DataFrame的逆运算是pandas.melt,它合并多个列成为一个,产生一个比输出长的DataFrame。例子: 

《利用Python进行数据分析》学习笔记 第8章 数据规整:聚合、合并和重塑

使用pandas.melt,指明使用key作为唯一的分组指标: 

《利用Python进行数据分析》学习笔记 第8章 数据规整:聚合、合并和重塑

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

《利用Python进行数据分析》学习笔记 第8章 数据规整:聚合、合并和重塑

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

《利用Python进行数据分析》学习笔记 第8章 数据规整:聚合、合并和重塑