dataframe 如何增加新的索引_带你领略pandas中多表之间如何处理

e8ec40ebfde6c0e9bcd73bac9ada8c2d.png

但我们在处理Pandas多表数据时,我们需要将多个表之间进行表格的连接与合并,当连接完多表之后我们可能还需要对数据进行多重的索引,方便我们更快的找到数据,以及对数据进行做透视表,更加直观的去观察我们的数据,今天我们就围绕着数据合并以及数据重塑及透视表进行展开讲解,让我们去了解在Pandas中如何去这么操作数据。

一、数据合并

1、连接表,

在我们获得数据的时候可能数据并不完整,而我们需要将这些不完整的数据合并到一起组成一个完整的数据,下面我们对数据进行合并的操作。

  • 创建3个DataFrame表格

fef016e6d99978261259a3e9bd97809f.png

查看一下三个表的数据

0f3f231487574b409a52259bb5c98dd1.png

a31866ea950376fd0cc893b11f81267c.png

c0fb57449a60cf74e4befcc4c6a507cb.png
  1. 将表格通过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

55426b5a2490be2ffb89402fc98be53f.png
  • 通过keys参数设置连接df1、df2、df3的值为x、y、z

d2d9e7d7d2686617895a07d55eb39b1d.png
  • 新增加一个df4表,横向连接到df1表的第2、3、6、7列

96495f97f3187053027ff1accd6efee1.png
  • 将df1和df4横向进行交集合并

bbbc0da053493ec1a7c8d5582b767611.png

可以看出,合并后的数据为df1和df4都有的索引行进行合并的

  • 按照df1的索引进行df1表和df4表的横向索引

78b963775a088106187c2f074d8ed486.png
  • 结果可以看出合并是按照df1表的索引进行合并的。
  1. 通过append()方法连接表格
  • 连接df1和df2

60b44ddf54c345ddd61fee70a3d5bac1.png
  • 连接df1和df4表

6fb1ab985983924d430a85da1c7e1d5e.png

可以看出在合并的数据中原表中没有的索引和列值都填充为了NaN缺失值。

  • 连接df1、df2、df3表

8f3117469785440eb84a073c75cc6e3f.png
  • 忽略连接轴上的上的索引

ded631bf4617b8af466dc3e9ed3cc6d7.png
  • 新增加一个s1表,并且跟df1进行横向合并

453d70d0a44d49279d1f1aab667494f1.png
  • 新增加一个s2表,并且跟df1进行多次连接

d7d97fbb212fe5fb656e7dcde4463624.png

结果可以看出,s2表中的数据并未确定列名,那么系统就自动的从0开始进行列名的名称。

  • 表格合并后不保留原有的索引列名

aa142c5d3bcb42fa1c94a83530c84122.png

表格合并后将原有的列名全部替换为一个range()序列

1.3、附加行

0f83d152abf1bea5589076f186dcaac7.png

2caae7fc3c3bc89aaa83baab835a951e.png

f399f66f02485cbfde34599c44312f67.png

结尾可以看出,合并后将s2中的数据作为附加行跟在了df1表的后面

2、数据库风格的DataFrame连接/合并

2.1、单个键进行连接

  • 创建两个表格并查看

56a69c681dfc3fc05360c29c61ec8ede.png
  • 将key作为两个表连接的中介

ee535849a953af43e3fed42a07103fde.png

2.2、多个键进行连接

  • 创建两个表格,然后将表格以Key1和key2作为中介进行连接

20df0988a42c5397b8caaa542c96bddb.png

可以看出左右表以共同存在的key1、key2的行作为取出元素的依据,只取出了前三行,left表中的第四行为k2、k1,right表中的第四行为k2、k0,并不匹配所以没有进行取值。

  • 以左表为主导进行连接,连接以key1,key2作为连接中介进行取值

52d5d730011f5ac3a29625466aa6d076.png

可以看出这次连接是以left表汇总的key1 、key2作为主键进行连接,right表中的不存在的主键元素则以NaN代替。

  • 以右表的key1、key2位主键进行连接

e540b46864bd43f982073c11cf13cd23.png
  • 以两个表所有的key1、key2的元素都取出来

458d48b889f045da5996344adfd28d51.png
  • 当两个表列名相同时进行合并

e6829e1c568ceddeeac252c397887fe6.png

列名相同时则会重新命名列名

2.3、合并指示符

  • 以并集进行合并

926a1fbf69ff5a6748731045c8bfffb4.png

也可以使用字符串作为参数替代True,字符串会作为该列的列名称。

79d8e6b62ea60e71bc4c70256b2bef3b.png

2.4、通过索引进行连接

  • 通过左表索引连接右表

d0ecff5c546aecefa2d2e327455f8204.png
  • 左表连接右表,求并集的形式

5a77b770fa7792166e6e686b4e9c8cf5.png

37c7a585faf544bd1eaf4c0a59108dbe.png
  • 左表连右表,求交集的形式

a5f44d626f10f451b9842f02a50863f8.png

3c7ca923e6787fe3b6371bf4b0486e43.png

2.5、通过索引和某列连接

94e03e0718a0b2be25e7ae9e163e01e9.png

通过结果可以看出,right表中的数据重复了一遍。

2.6、重叠列名称的合并

5f58ee6685047e41c2270b5c7a9a27a8.png

2.7、数据框拼接

b787eefe0418fddf31c11f03d71639e5.png

1dbcb54174e6286997688ab44d15f5de.png

如果都存在的值以传入的数据为准

46c04a11c3206288c8561e856d1a8ee9.png

二、数据重塑及透视表

1、多重索引

  • 创建表格并查看

97e2d96834dba0877fce2b18e00b34f4.png
  • 查看animal和hair_length下的所有数据

6817004dfe1e015f4aeadb1c8c0dd06e.png

或者以一级标题或二级标题进行查看

2a1d7dd007a324f8066350e0f5994372.png
  • 创建表格并查看

2078c481508315a2fad7e2020ea8d9c0.png

使用level参数进行调用

  • 查看exp下面的属性值

e698af9e5766870b7ce3549c4261c166.png
  • 查看anmal下面的属性值

43f96240b9bc0b17814dae5590761e74.png
  • 调用数据

227c80a7326411a545e77ad611a12fca.png

51bb958985f89faf7121a6fcfd906e0b.png
  • 调用first数据

bc943a078191fd01182a8a8485758231.png
  • 调用second数据

01745e3b605b651d2fe0cf47a81743d2.png

2、透视表

  • 创建一个透视表

33a1625242d9ed8fba8b1702d51cd91c.png
  • 查看D列,索引为A,B,列为C的所有数据

c071fc621b9c8508bf6cbcf75b3bae72.png
  • 查看D列,索引为B,列为A,C的所有数据求和

861129f092fe591109da56bc97ac0d9c.png
  • 查看DE列,索引为B,列为A,C的求和数据

cee849c8ad56e92323045e57702b2689.png
  • 查看索引为A,B,列为C的数据

41ca616980a43b35b2c4d9519687a48b.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值