1. 首页
  2. 数据挖掘

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

上一期我们使用pandas模块实现频数统计、缺失值处理、数据映射和数据汇总 4个知识点,这期我们再来聊聊关于pandas如何实现数据合并 、数据连接 、创建哑变量和连续数值的区间化的操作。前两个操作在数据库中是非常常用的,即将多个数据集纵向合并和横向的扩展;后两个操作在数据建模中会经常用到,即离散变量的哑变量化处理和连续变量的分段处理。

一、数据集的纵向合并

如果你手中有多张数据结构一致的excel表格,你需要将这些表格合并到一起,你会怎么做?复制粘贴?是不是太慢了,这里教你使用Python完成数据的批量合并。

例如,我的D盘中有这些个结构一致的excel表格:

从零开始学Python --pandas(数据框部分04)可以通过如下的Python代码完成数据的堆叠

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

,pd.concat函数的第一个参数一定要是一个可迭代对象。故在代码中对dataframe初始化为列表结构。

结果如下:

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

我们看看R语言的环境下,是如何完成数据集的纵向合并:

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

结果如下:

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

二、数据集的横向扩展

如果你所需的数据集来自于多张表,而这些表之间存在一些公共的字段用于观测行的匹配,换句话说,你需要在excel使用vlookup这样的函数完成数据的连接。要想实现该功能,在Python中应该如何实现呢?

先来看一下需要join的数据长啥样:

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

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

接下来,借助于pandas中merge函数完成两个数据集的连接,即将economy_info表中的字段合并到user_info表中,形成一张宽表。

我们先来看一下merge函数的几个重要的参数:

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,          left_index=False, right_index=False, sort=False,          suffixes=('_x', '_y'), copy=True, indicator=False)left,right:为需要连接的两张表;how:默认对两张表进行内连,'right','left'为右连和左连,一般inner和left使用最多;on:指定关连两张表的公共字段;left_on,right_on:指定left表和right表中需要关连的字段;left_index,right_index:指定left表和right表中需要关连的行索引

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

结果如下:

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

如果你的两张表有公共字段,而且字段名称完全一致,merge函数会自动查询这些字段,并以这些字段作为连接的依据。如果两张表中含公共字段,但名称不一致,如Id与id,这个时候就需要left_on和right_on两个参数的使用了。

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

结果如下:

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

发现表中含有两个id,这个时候需要你手工再删除一下,可以通过drop函数删除其中一个变量。关于变量的删除你可以参考这篇文章:

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

R语言也同样可以完成这部分工作,只需要借助于dplyr包即可,具体操作如下:

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

结果如下:

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

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

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

三、离散变量的哑变量处理

在建模过程中,往往会有一些离散变量,如学历、收入等级,用户会员等级。这些变量直接放入到模型中(如回归模型)是有问题的(即使你已经用1,2,3…等数据表示),为解决这个问题,我们通常是将这些变量进行哑变量处理。如果离散变量有N种水平,就需要构造N-1个变量,每一个变量均用0和1的值来表示。那这样的0-1编码,如何使用Python来实现呢?如果你使用了pandas模块中的get_dummies函数,问题就会显得非常容易。下面我们举例说明:

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

该数据集中的gender变量和level变量都属于离散变量,需要将这两个变量进行哑变量处理。

结果如下:

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

是不是很方便。千万记得,如果你的变量进行了哑变量处理,建模时要记得删除原离散变量中的某一个水平,如性别中删除gender_F,等级中删除level_V1。删除的变量,就表示性别中,以女性(F)为参照组;等级中,以V1为参照组。如下是变量的删除:

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

在R语言中,也有与此功能一致的哑变量处理函数(dummyVars),该函数的调用需要下载caret包,该包有非常强大的数据清洗功能,感兴趣的读者可以阅读这两篇文章:

教你使用caret包(一)–数据预处理

借助caret包实现特征选择的工作

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

结果如下:

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

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

注意,这个只是含有所有哑变量的数据集,并不包含其他连续变量,如id,age变量。故还要通过cbind函数将两个数据集合并起来。

结果如下:

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

删除某个哑变量

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

四、连续变量的分段

最后,再来看一个知识点,那就是需要把连续变量进行分段处理,如年龄需要分成未成年、青年、中年和老年;收入需要分成低收入群体、中等收入群体和高收入群体,数据中类似这样的问题还是蛮多的,如何把这些连续数据进行分段处理呢?看看Python是如何达到目的的:

这里我们随机生成一列数据表示年龄

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

假如18岁以下为未成年;18~45岁为青年;45~60岁为中年;60岁以上为老年,接下来就根据这些阈值把年龄分为4段。

结果如下:

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

图中right参数设置为False,表示分段的数据区间不包含上限

原始年龄数据如下,查看与分段的年龄组对比:

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

同样的问题,看看R语言是如何解决的:

结果如下:

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

虽然cut2函数把数据集切割成了4段,但返回的结果是区间表示,我们还需要通过因子函数,再将这些区间表示转换成明确的含义。

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

今天我们的内容就介绍到这边,欢迎大家交流与拍砖。下期我们来分享一些Python的可视化方面的知识点。

待续……

本文已获作者授权

从零开始学Python系列:

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

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

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

4、从零开始学Python –numpy

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

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

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

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

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

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

联系我们

4000-51-9191

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

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