【Python教程】正儿八经地认识一下pandas(一)

更多教程请私信~

来源:思路实验室 

作者:室长

大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。

在之前的教程中,我们以个税计算为例,向大家展示了pandas的强大功能。今天我们来正儿八经地认识一下pandas。

生成DataFrame:

我们之前是采用读取文件的方式生成DataFrame的,这很实用,但并不是必须的。我们可以从头生成一个DataFrame:

DataFrame里第一个参数data是表格数据本身,形式可以是例子中所示的一组数据,每一组数据都会形成DataFrame里的一行数据,如果不填则对应的数据为NaN(即没有值)。index参数是索引值(又称行标签),columns参数是列标签。如果不对index或columns赋值,那行标签或列标签默认从0开始。需要注意的是如果对data赋值了,那么在给index和columns赋值时需要保证长度符合data数据的尺寸,比如3行数据不能赋4个行标签。dtype参数是数据类型。

这样,一个简单的DataFrame就建立好了。

读取数据:

Pandas里DataFrame的数据结构如下图所示:

而Series的结构类似与字典,Series里的“键”就是索引。在一个DataFrame里,所有Series的索引值是共用的。比如一个登记员工信息的表格里,姓名、住址、联系方式等每一列都对应着所有员工的工号。我们只要根据工号就能查找出相应员工的某项信息。如果我们把DataFrame比作一个斗柜,这个操作就像是直接抽出一个抽屉来,十分快捷也十分自然。

它的用法和从字典里取出对应的值是一样的:

在这种结构下,我们如果想要作图是非常方便的。假设索引是x轴上的值,对应的值是y轴上的值,那我们只需要从DataFrame中取出想要作图的列就可以了。

但很多时候我们希望取出一行数据,这就像是从斗柜中每个抽屉里都取出一个文件,用常规的方法就比较麻烦。因此在DataFrame里存在一个专门的方法来解决这个问题,就是我们已经见过的loc方法

用这种方法取出来的信息也成为了一个Series,不过这个Series的索引变成了DataFrame里的列标签。

需要注意的是,loc方法使用行/列标签来提取数据,也不仅仅能够提取行数据。在编程中,我们未必什么时候都知道索引值,或者什么时候都会去使用索引值。按指定的顺序编号来提取行吗?也可以,不过使用的不是loc方法,而是iloc方法

由于Python从零开始的特性,第2行数据的序号是1。

虽然我们举的是取一行或一列数据的例子,但实际上取多行多列也是可以的,只需要我们把填入的标签换成含标签的列表即可:

实际上,loc/iloc的作用并不只是用来读取数据,它更像是一个定位器,设定参数让它定位到指定位置,想让它读数据就能读,想让它添数据就能添,想让他改数据就能改,功能非常强大,我们一会儿就可以体验到。

爱动脑子的同学已经开始思考了:既然能使用loc方法把一行数据转成列数据,那能不能把DataFrame的行转换成列?

当然可以,这在excel使用转置操作就可以实现,在pandas中自然也可以,使用的是T属性:

注意这个T属性不是方法,不能被调用,使用时需要将T属性的值赋给变量。

数据的增删改:

我们在之前计算个税的时候已经初步地了解了一些增删数据的方法。但毕竟覆盖面太窄,这里给大家按照不同情况详细说明一下:

1.整行整列地增加指定数据:

比如我们想在当前表中增加一行王老五的数据,就可以这样:

而添加一列数据的方法也是一样的:

这里仍然需要注意添加的数据的行数或列数应当与当前表格相符,不过如果不相符仍然是有办法的,我们可以使用loc方法选出一个与要添加的数据相符的区域,将数据填进这个区域就可以了:

这个过程画成图大概是这个样子的:

没有数据的地方则是NaN,即空值。但是目前这种方法只支持单行数据的添加。如果在loc中行标签的位置填入的是列表则会报错。

有一种特殊情况,如果我想把这一行或者一列赋同一个值,那么在赋值时就赋这个值就行,不需要再写成列表:

2.通过运算得出行/列值:

这是我们之前了解过的方法,直接取行或者列进行运算,运算结果仍为Series,将结果赋给相应的行/列标签就可以了:

这里loc方法行标签这里只写了一个冒号,这里的冒号用法和列表是一样的,代表整个列表。在loc方法的这个位置写一个冒号就是指选取DataFrame的所有行。因为在loc方法中行标签在前,列标签在后,如果不这么写,loc方法会把['1','2']认成列标签。

3.删除整行整列:

这个方法我们之前也了解过,就是drop方法。drop方法通常只要相应地在index参数或columns参数填入相应的标签或标签列表就可以:

但在有些情况下,行标签和列标签的内容会有重复的,同时我们在编写程序的时候可能不确定需要删除行还是删除列,只知道需要删除的标签,这时候我们需要将标签填入label参数,然后修改axis参数的值。axis默认为0,即认为label是行标签,删除行。如果想作为列标签来删除列,则要另axis=1。

另外仍要注意,如果需要在原表格上直接删除,需要将inplace参数设为True,否则原表格不变,删除后的表格为返回值。

4.修改行/列标签:

实现对行/列标签的修改,我们可以使用rename方法,把修改前的标签和修改后的标签作为键值对存入字典,这个字典传入index参数就是修改行标签,传入columns参数就是修改列标签,传入第一个参数并且设定axis参数值则是根据axis值来判断修改哪种标签。rename方法仍然有inplace参数。

5.修改数据:

修改数据实际上和添加数据原理一样,很多时候是借助loc方法进行定位,然后把新的数据“贴”到旧数据的上边:

由于篇幅所限,这一期先讲这么多。Pandas模块的信息量非常大,但这并不意味着它很复杂,只不过是因为它太灵活了,想要达成一种目的可以有非常多的方法。教程里可以讲到的也不过是一部分而已,更多的用法需要大家在实际应用中去探索。在下一期的教程中,我们将会学习如何利用pandas进行数据清洗。如果这篇文章对你有所帮助,希望能帮室长点个赞和在看,你的鼓励是室长进步的动力!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值