但我们在处理Pandas多表数据时,我们需要将多个表之间进行表格的连接与合并,当连接完多表之后我们可能还需要对数据进行多重的索引,方便我们更快的找到数据,以及对数据进行做透视表,更加直观的去观察我们的数据,今天我们就围绕着数据合并以及数据重塑及透视表进行展开讲解,让我们去了解在Pandas中如何去这么操作数据。
一、数据合并
1、连接表,
在我们获得数据的时候可能数据并不完整,而我们需要将这些不完整的数据合并到一起组成一个完整的数据,下面我们对数据进行合并的操作。
- 创建3个DataFrame表格
查看一下三个表的数据
- 将表格通过concat()方法进行合并
Concat参数如下
Objs(必须参数)
参与连接的pandas对象的列表或字典
Axis
指名连接的轴向,默认为0
Join
选中inner或outer(默认),其他轴向上索引是按交集(inner)还是并集(outer)进行合并
Join_axes
指名用于其他N-1条轴的索引,不执行并集/交集运算
Keys
与连接对象有关的值,用于形成连接轴向上的层次化索引。可以是任意值的列表、数组、元组数组和数组列表(如果需要将levels设置成多级数组的话)
Levels
指定用作层次化索引各级别的索引,如果设置了keys的话
Names
用于创建分层级别的名称,如果设置了keys或levels的话
Verify_integrity
检查结果对象新轴上的重复情况,如果发则引发异常。默认为(false)允许重复
Ignore_index
不保留连接轴上的索引,产生一组新索引range
- 通过keys参数设置连接df1、df2、df3的值为x、y、z
- 新增加一个df4表,横向连接到df1表的第2、3、6、7列
- 将df1和df4横向进行交集合并
可以看出,合并后的数据为df1和df4都有的索引行进行合并的
- 按照df1的索引进行df1表和df4表的横向索引
- 结果可以看出合并是按照df1表的索引进行合并的。通过append()方法连接表格连接df1和df2
- 连接df1和df4表
可以看出在合并的数据中原表中没有的索引和列值都填充为了NaN缺失值。
- 连接df1、df2、df3表
- 忽略连接轴上的上的索引
- 新增加一个s1表,并且跟df1进行横向合并
- 新增加一个s2表,并且跟df1进行多次连接
结果可以看出,s2表中的数据并未确定列名,那么系统就自动的从0开始进行列名的名称。
- 表格合并后不保留原有的索引列名
表格合并后将原有的列名全部替换为一个range()序列
1.3、附加行
结尾可以看出,合并后将s2中的数据作为附加行跟在了df1表的后面
2、数据库风格的DataFrame连接/合并
2.1、单个键进行连接
- 创建两个表格并查看
- 将key作为两个表连接的中介
2.2、多个键进行连接
- 创建两个表格,然后将表格以Key1和key2作为中介进行连接
可以看出左右表以共同存在的key1、key2的行作为取出元素的依据,只取出了前三行,left表中的第四行为k2、k1,right表中的第四行为k2、k0,并不匹配所以没有进行取值。
- 以左表为主导进行连接,连接以key1,key2作为连接中介进行取值
可以看出这次连接是以left表汇总的key1 、key2作为主键进行连接,right表中的不存在的主键元素则以NaN代替。
- 以右表的key1、key2位主键进行连接
- 以两个表所有的key1、key2的元素都取出来
- 当两个表列名相同时进行合并
列名相同时则会重新命名列名
2.3、合并指示符
- 以并集进行合并
也可以使用字符串作为参数替代True,字符串会作为该列的列名称。
2.4、通过索引进行连接
- 通过左表索引连接右表
- 左表连接右表,求并集的形式
- 左表连右表,求交集的形式
2.5、通过索引和某列连接
通过结果可以看出,right表中的数据重复了一遍。
2.6、重叠列名称的合并
2.7、数据框拼接
如果都存在的值以传入的数据为准
二、数据重塑及透视表
1、多重索引
- 创建表格并查看
- 查看animal和hair_length下的所有数据
或者以一级标题或二级标题进行查看
- 创建表格并查看
使用level参数进行调用
- 查看exp下面的属性值
- 查看anmal下面的属性值
- 调用数据
- 调用first数据
- 调用second数据
2、透视表
- 创建一个透视表
- 查看D列,索引为A,B,列为C的所有数据
- 查看D列,索引为B,列为A,C的所有数据求和
- 查看DE列,索引为B,列为A,C的求和数据
- 查看索引为A,B,列为C的数据