1. 首页
  2. 数据挖掘

从零开始学Python–pandas(数据框部分02)

接着上一期的pandas模块介绍与应用,今天我们来聊聊如何借助于pandas模块进行数据的预处理,内容包括数据集变量与观测的筛选、变量的重命名、数据类型的变换、排序、重复观测的删除、和数据集的抽样。

一、数据筛选

以iris数据集为例,想从数据集中取出某列(序列对象)或某几列该如何操作?

从零开始学Python--pandas(数据框部分02)

在pandas取出一列有两种方法,一种是比较普遍适用的名称索引法,另一种则是点取法。看看下面的例子就可以理解了:

从零开始学Python--pandas(数据框部分02)

如果使用点取法取出数据集中的某列,需要注意的是列的名称必须是一个整体,例如stu age或stu.age等格式的变量名就不能使用点取法。

对应到R语言中,也有两种取列的方法,分别是索引法$取法

从零开始学Python--pandas(数据框部分02)

需要注意的是,如果你使用名称索引法,列名称一定要写在逗号,后面,因为逗号前面的内容表示要取的行,逗号后面的内容表示要取的列。

如果你需要取出的不仅仅是一列数据,而是多列,那不管是Python还是R语言只能使用名称索引或位置索引了。接下来再来看看如何按照某些条件取出想要的观测行:

一个变量的观测筛选

从零开始学Python--pandas(数据框部分02)

两个变量的观测筛选

从零开始学Python--pandas(数据框部分02)

需要注意的是:多个变量的筛选,可以是或(|)关系、可以是且(&)关系还可以是非(~)关系,一定要用圆括号把条件括起来。

两个变量的观测筛选并筛选部分变量

从零开始学Python--pandas(数据框部分02)

在Python中通过索引的方式获取数据的部分子集,虽然有loc和iloc可以实现取子集,但我更推荐loc函数的应用,因为个人觉得iloc应用的场景比较少,它是基于行或列的位置进行数据筛选的。例如

从零开始学Python--pandas(数据框部分02)

R语言中,获取数据集的子集就更容易了,这里强烈推荐使用subset函数。按照上面Python的例子用R语言实现一遍:

一个变量的观测筛选

从零开始学Python--pandas(数据框部分02)

两个变量的观测筛选

从零开始学Python--pandas(数据框部分02)

两个变量的观测筛选并筛选部分变量

从零开始学Python--pandas(数据框部分02)

二、变量的删除

有时,在一张表里你可能需要删除与建模或分析无关紧要的变量,如用户id、姓名、邮编号码等。在Python中,你可以借助于drop函数非常轻松的删除指定的变量。

从零开始学Python--pandas(数据框部分02)

需要注意的是,该函数默认的axis=0,表示删除行观测,如果需要删除列,就要将asix设置为1。记住,此时虽然删除了两个变量,但iris数据集本身是没有变化的,如果你需要改变iris数据集,需要设置inplace为True

在R语言中,我们仍然使用subset函数进行变量的筛选,通过select参数,将需要删除的变量前面加上负号(-)即可,如下:

从零开始学Python--pandas(数据框部分02)

三、变量重命名

如iris数据集,由于第一个变量的名称为“Sepal.Length”,中间有句点号,故Python不可以使用点取法获得该数据集的第一个变量,而只能通过索引获取。如果把该变量的名称改为“Sepal_Length”,就可以使用点取法了,该如何更换变量名呢?rename函数可以帮助我们解决问题:

从零开始学Python--pandas(数据框部分02)

是不是很方便,在R语言中可以使用plyr包中的rename函数实现相同的功能,具体看如下的例子:

从零开始学Python--pandas(数据框部分02)

四、数据类型转化

使用Python进行建模的话,需要所有的输入变量均为数值型变量,然而手中的实际数据集并非全是数值型变量,该如何把字符型数值变量转化为数值变量呢?

字符型数值转数值

从零开始学Python--pandas(数据框部分02)

从零开始学Python--pandas(数据框部分02)

上面创建的表,显示age变量和outcome变量为字符型变量,就需要将其转化为整数型和浮点型,具体可以通过astype函数实现:

从零开始学Python--pandas(数据框部分02)

通过字典的方式,对不同的变量设置不同的数据类型。

R语言中,可以使用as.numeric()和as.integer()函数完成字符型数值变量的数值型变换:

从零开始学Python--pandas(数据框部分02)

需要注意的是,对于字符串变量,读入到R中,会强制转化为因子型变量,故将age变量和outcome变量转化为数值型变量时,需要先转化为字符串再转数值,否则会出现意想不到的结果!!

五、数据集的排序

如果你需要对你的数据集进行排序,Python中pandas模块也提供了非常好用的sort_values函数。我们举例说明:

从零开始学Python--pandas(数据框部分02)

再来看看R语言中是如何实现数据集的排序的,你只需要下载并加载plyr包,然后调用arrange函数实现上面一致的结果:

从零开始学Python--pandas(数据框部分02)

arrange函数默认按指定变量进行升序排序,如果你需要降序处理,则需要把变量放在desc()内

六、数据去重

在数据清洗中,往往都要检查一下数据集的观测行是否有重复,如果存在重复的话必须将其删除,来看看Python的pandas模块是如何检查数据集是否重复,并完成数据集的去重

从零开始学Python--pandas(数据框部分02)

从零开始学Python--pandas(数据框部分02)

从零开始学Python--pandas(数据框部分02)

由上面的例子可知,duplicated函数可以用来检查数据集是否重复,如果重复,则会在重复的行显示True。然后,通过drop_duplicates函数对数据集的重复观测进行删除。这两个函数均有subset参数,默认对数据集的所有变量进行重复性检测和删除,如果你需要指定某些变量的重复性检查和删除就可以往subset参数传递变量,例如:

从零开始学Python--pandas(数据框部分02)

R语言中,仍然通过duplicated函数对数据集的观测行进行重复性检查,然后再通过索引的方式,将重复的观测进行删除

从零开始学Python--pandas(数据框部分02)

从零开始学Python--pandas(数据框部分02)

七、抽样

最后,我们再来讲讲如何使用pandas模块进行数据集的抽样,毕竟抽样在建模或机器学习中还是非常常用的,通过抽样构建训练集和测试集,训练集用来模型的生成,测试集用来模型的检验。pandas模块有一个sample函数可以帮助我们完成抽样的任务:

先来看一下sample函数的几个重要参数

sample(n=None, frac=None, replace=False, weights=None, random_state=None)n:指定抽样的个数frac:指定抽样的比例replace:指定是否有放回的抽样,默认为无放回抽样weights:指定每个样本被抽中的概率,默认每个样本抽中的概率相等random_state:指定抽样的随机种子,默认无固定的随机种子,即每次抽样的结果都不一样

抽样实例

从零开始学Python--pandas(数据框部分02)

训练集可以直接从sample函数中抽取出来,测试集则通过索引的方式,将训练集中的行号排除出去。

从零开始学Python--pandas(数据框部分02)

R语言中,抽样还是使用sample函数,而且参数都跟pandas模块中的sample函数类似。

sample(x = , size = ,replace = FALSE, prob = NULL)

x为被抽样的对象

size为抽取的样本量

replaece指定是否有放回的抽样,默认无放回抽样

prob指定样本抽中概率,默认每个样本被抽中的概率一样

抽样实例

从零开始学Python--pandas(数据框部分02)

今天我们的内容就介绍到这边,欢迎大家拍砖。下期我们来聊聊pandas模块的数据框DataFrame第三部分。主要涉及缺失值处理、数据集的合并和连接、分组汇总、哑变量生成、连续数值的区间化等操作。

待续……

本文已获作者授权。

从零开始学Python系列:

1、从零开始学Python–数据类型及结构

2、从零开始学Python–数值计算及正则表达式

3、从零开始学Python–控制流与自定义函数

4、从零开始学Python –numpy

5、从零开始学Python–pandas(序列部分)

6、从零开始学Python–pandas(数据框部分01)

原文始发于微信公众号(PPV课数据科学社区):从零开始学Python–pandas(数据框部分02)

原创文章,作者:ppvke,如若转载,请注明出处:http://www.ppvke.com/archives/9651

联系我们

4000-51-9191

在线咨询:点击这里给我发消息

工作时间:周一至周五,9:30-18:30,节假日休息