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

本文详细介绍了在Pandas中如何进行数据合并,包括连接表、附加行、数据库风格的连接/合并等,并展示了如何处理多级索引。同时,还探讨了数据重塑和透视表的使用,如多重索引的调用和透视表的创建。
摘要由CSDN通过智能技术生成
8f18f300d1ec8da8414fda556b0a1a8a.png

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

一、数据合并

1、连接表,

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

  • 创建3个DataFrame表格
d3b388edd07177cf3070267d21f877cc.png

查看一下三个表的数据

0885b2e7a6eddb08e9631a33a344bb48.png
0d717d8a7b3d42dde063a7bffac49af6.png
4b9c450d4947e5bd293725b44616b724.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

9db0b980532c4b59dbc98c1b2de367aa.png
  • 通过keys参数设置连接df1、df2、df3的值为x、y、z
496fab9e1e8aebdfc86e95f50ed6f9f3.png
  • 新增加一个df4表,横向连接到df1表的第2、3、6、7列
968d8ef11f74582d8b1e699fb3a62d33.png
  • 将df1和df4横向进行交集合并
d2fd2bd77a689ed6a6c0d90814a42686.png

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

  • 按照df1的索引进行df1表和df4表的横向索引
cb1a9ec576cd36b3c1e2fe9278a3f114.png
  • 结果可以看出合并是按照df1表的索引进行合并的。通过append()方法连接表格连接df1和df2
5cacf2f90f862ff64eef43c9895870cb.png
  • 连接df1和df4表
deabc7aec856d187053310f74f44b857.png

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

  • 连接df1、df2、df3表
14bf171161b9184664cecb4cecf56099.png
  • 忽略连接轴上的上的索引
eba27ed67fa634f1ff5de1a015fb2ee6.png
  • 新增加一个s1表,并且跟df1进行横向合并
dc489ab1d98b9c38dbfa937afa974dcb.png
  • 新增加一个s2表,并且跟df1进行多次连接
79ce7c2d7603cf8878a0700d7431a532.png

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

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

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

1.3、附加行

c515783580fbb95e2a369f979dd303a3.png
c3eca5ea36b5a65d67a09e545450a782.png
fb68acb3e01522d2bf7a0240c0586d5b.png

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

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

2.1、单个键进行连接

  • 创建两个表格并查看
303a0daa419eaf97156ef8e3047e4167.png
  • 将key作为两个表连接的中介
142b11fd78a8f07072c8fabc1701c845.png

2.2、多个键进行连接

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

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

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

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

  • 以右表的key1、key2位主键进行连接
01913f2dc31092c516cd9ffc344042e8.png
  • 以两个表所有的key1、key2的元素都取出来
068ff5389b8b3ffe9eed9a057a428dcf.png
  • 当两个表列名相同时进行合并
9ff2ae0192da023beaa5e60888142b5d.png

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

2.3、合并指示符

  • 以并集进行合并
f5cf9a6c863ae8f191af26d2170e6f71.png

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

a506929c155053c8fe0d25d09b62c09d.png

2.4、通过索引进行连接

  • 通过左表索引连接右表
e9b7f67eab0fcd93c22753a978de3bb3.png
  • 左表连接右表,求并集的形式
c725956544764607ba5a57c8a9dbeee9.png
4549641e75b106fab3798230ae42fb7b.png
  • 左表连右表,求交集的形式
d7caeab8a154bad69113374272d4a812.png
ee4d193e87a825182e885d463b415162.png

2.5、通过索引和某列连接

7bb18ee0c5667fb808314299debb0f0b.png

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

2.6、重叠列名称的合并

a93727748b68d13d2ba4571c755a58a3.png

2.7、数据框拼接

83617a318cafc969e84b56ad1a1c6070.png
078565e94e24c919cea095bf37778231.png

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

2bf4c260a554269875526a2dd548f649.png

二、数据重塑及透视表

1、多重索引

  • 创建表格并查看
7ae620a942db63481c047451ba0a7569.png
  • 查看animal和hair_length下的所有数据
8f036574878046cd808ce37100e1b865.png

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

0561979b2af9d98593820bc0421813c7.png
  • 创建表格并查看
58f934d465582c3fe066f87fdeccc155.png

使用level参数进行调用

  • 查看exp下面的属性值
12ec78e35d926660a5607f9e8c62b7ba.png
  • 查看anmal下面的属性值
84a3c4c128970f0f13ff82d1534e0444.png
  • 调用数据
227fc004360ebb8054e906425029f7a8.png
7dca1b8c2806d9687a1ed7b12681ecd2.png
  • 调用first数据
7bb344d09f7240d25a3f3177a61e74b1.png
  • 调用second数据
45c1fb6c76d21f24361e0e29893c379b.png

2、透视表

  • 创建一个透视表
3b145c0b9b5296e4f671fd801d67532d.png
  • 查看D列,索引为A,B,列为C的所有数据
f7bc7e8dabf4710736dc77997b3dc97e.png
  • 查看D列,索引为B,列为A,C的所有数据求和
a9eccad5a57efd395ae449137e35755e.png
  • 查看DE列,索引为B,列为A,C的求和数据
5f5ac882565766c180c3ddf5715384dd.png
  • 查看索引为A,B,列为C的数据
8b65881fb08315fa5e4b169349391fb9.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值