从零开始学Python【8】--pandas(数据框部分03)

浏览: 2263

上一期我们使用pandas模块实现观测的筛选、变量的重命名、数据类型的变换、排序、重复观测的删除、和数据集的抽样,这期我们继续介绍pandas模块的其他新知识点。包括频数统计、缺失值处理、数据映射、数据汇总。

一、频数统计

 我们以被调查用户的收入数据为例,来谈谈频数统计函数value_counts

image.png

频数统计,顾名思义就是统计某个离散变量各水平的频次。

image.png

这里统计的是性别男女的人数,是一个绝对值,如果想进一步查看男女的百分比例,可以通过下面的方式实现:

image.png

在R语言中table函数就是起到频数统计的作用,另外还提供了更加灵活的prop.table函数,可以直接求出比例。

image.png

如上是单变量的频数统计,如果需要统计两个离散变量的交叉统计表,该如何实现?不急,pandas模块提供了crosstab函数,我们来看看其用法:

image.png

R语言的话,任然使用table函数即可。

image.png

二、缺失值处理

在数据分析或建模过程中,我们希望数据集是干净的,没有缺失、异常之类,但面临的实际情况确实数据集很脏,例如对于缺失值我们该如何解决?一般情况,缺失值可以通过删除或替补的方式来处理。首先是要监控每个变量是否存在缺失,缺失的比例如何?这里我们借助于pandas模块中的isnull函数dropna函数和fillna函数

首先,我们手工编造一个含缺失值的数据框:

image.png

其次,使用isnull函数检查数据集的缺失情况:

image.png

最后,对缺失数据进行处理:

删除法

dropna函数,有两种删除模式,一种是对含有缺失的行(任意一列)进行删除,另一种是删除那些全是缺失(所有列)的行,具体如下:

image.png

由于df数据集不存在行全为缺失的观测,故没有实现删除。

替补法

fillna函数提供前向替补、后向替补和函数替补的几种方法,具体可参见下面的代码示例:

image.png

image.png

再来看看R语言是如何重现上面的操作的:

image.png

image.png

不幸的是,R中没有删除每行元素都是缺失的观测,我们自定义个函数也可以实现:

image.png

关于缺失值的替补,在R语言中可以使用Hmisc包中的impute函数,具体操作如下:

image.png

三、数据映射

大家都知道,Python和R在做循环时,效率还是很低的,如何避开循环达到相同的效果呢?这就是接下来我们要研究的映射函数apply。该函数的目的就是将用户指定的函数运用到数据集的纵轴即各个变量或横轴即各个行。

例如以上面的统计数据集df各行和各列是否存在缺失为例,原先是这样的:

image.png

现在通过映射函数可以这样简介而快速的实现:

image.png

再如,需要计算每个学生的总成绩,或各科的平均分,也可以用apply函数实现:

image.png

image.png

R语言中,实现上述映射操作的函数有很多,这里就以sapply和apply两个函数为例:

image.png

如图所示,如果需要统计数据集每行的某个值,需要先将数值型的数据框转化为矩阵,然后基于矩阵使用apply函数。

四、数据汇总

如果你想要做类似SQL中的聚合操作,pandas也提供了实现该功能的函数,即groupby函数与aggregate函数的搭配使用,我们以上面的收入数据集为例作为演示:

image.png

以上结果默认会对所有数值型变量作性别的均值统计。

image.png

学会使用Python的pandas模块对数据进行聚合了,那接下来看看R语言又是如何实现的:

image.png

R语言的实现数据的聚合操作需要下载dplyr包,并结合group_by函数和summarize函数

image.png

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

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

从零开始学Python【6】--pandas(数据框部分01)

从零开始学Python【4】--pandas(序列部分)

从零开始学Python【4】--numpy

从零开始学Python【3】--控制流与自定义函数

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

从零开始学Python--数据类型及结构

每天进步一点点2015

学习与分享,取长补短,关注小号!

推荐 0
本文由 每天进步一点点2015 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册