目录
一、数据规整:连接、联合与重塑
1、分层索引
在一个轴向上拥有多个(两个或两个以上)索引层级。笼统地说,分层索引提供了一种在更低维度的形式中处理更高维度数据的方式
- series对象
- dataframe对象
- 通过分层索引对象,也可以称为部分索引,允许你简洁地选择出数据的子集
你可以使用unstack方法将数据在DataFrame中重新排列:
unstack的反操作是stack
- 分层的层级名称:如果层级有名称,这些名称会在控制台输出中显示
2、重排序和层级排序
(1)swaplevel交换层级
接收两个层级序号或层级名称,返回一个进行了层级变更的新对象(但是数据是不变的)
(2)sort_index()
在 Pandas 库的 DataFrame 和 Series 对象中都有这个方法。它的主要功能是对索引进行排序。
- 按行排序:可以使用
sort_index(axis=0)
或简写为sort_index()
对行进行排序。 - 按列排序:使用
sort_index(axis=1)
对列进行排序。
import pandas as pd
import numpy as np
frame = pd.DataFrame(np.arange(12).reshape((4, 3)),index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],columns=[['Ohio', 'Ohio', 'Colorado'],['Green', 'Red', 'Green']])
frame.index.names=['key1','key2']
frame.columns.names=['state','color']
print("初始数据")
print(frame)
x=frame.swaplevel('key1','key2')
print("换层级数据")
print(x)
y=x.sort_index(level=0)
print("排序数据,level=0")
print(y)
3、按层级进行汇总统计
DataFrame和Series中很多描述性和汇总性统计有一个level选项,通过level选项你可以指定你想要在某个特定的轴上进行聚合,见后续章节。
4、使用DataFrame的列进行索引
- set_index函数:会生成一个新的DataFrame,新的DataFrame使用一个或多个列作为索引:
4、联合与合并数据集
(1)merge连接
pandas中的merge函数主要用于将各种join操作算法运用在你的数据上:
- 基础数据
- 默认情况下,merge做的是内连接('inner'join),结果中的键是两张表的交集。
- 如果连接的键信息没有指定,merge会自动将重叠列名作为连接的键。但是,显式地指定连接键才是好的实现。如下图,根据‘key’列,进行合并
- 如果每个对象的列名是不同的,你可以分别为它们指定列名:
- how参数的其他可选的选项有’left'、'right’和’outer'。外连接(outer join)是键的并集,联合了左连接和右连接的效果:
- 多对多情况:多对多连接是行的笛卡尔积
多对多示例:
其他:
(2)根据索引合并
传递left_index=True或right_index=True(或者都传)来表示索引需要用来作为合并的键:
- 多层索引方法类似
- 使用两边的索引进行合并也是可以的:
- join实例方法:用于按照索引合并。
- 该方法也可以用于合并多个索引相同或相似但没有重叠列的DataFrame对象
注意:DataFrame的join方法进行连接键上的左连接,完全保留左边DataFrame的行索引
(3)沿轴向连接
另一种数据组合操作可互换地称为拼接、绑定或堆叠。
- concatenate函数
- contact函数:默认沿着axis=0的轴向生效的,生成另一个Series。如果你传递axis=1,返回的结果则是一个DataFrame(axis=1时是列)
- 假设你想在连接轴向上创建一个多层索引,可以使用keys参数来实现
(4)联合重叠数据
- 有两个数据集,这两个数据集的索引全部或部分重叠
- combine_first:
Series:等价于下面这种使用pandas常见数据对齐逻辑的轴向操作:
DataFrame对象:根据你传入的对象来”修补“调用对象的缺失值:
5、重塑和透视
statck(堆叠)
该操作会“旋转”或将列中的数据透视到行。
unstack(拆堆)
该操作会将行中的数据透视到列。
在这份数据上使用stack方法会将列透视到行,产生一个新的Series:
从一个多层索引序列中,你可以使用unstack方法将数据重排列后放入一个DataFrame中