概述:本文以kaggle比赛Microsoft Malware Prediction数据为例,如需数据请自行前往:

https://www.kaggle.com/c/microsoft-malware-prediction

所谓编码,自然是将一种符号编成一种数字码-----即数字变量。例如熟知的pd.get_dummies()就是讲一种字符型或者其他类型编程成一串数字向量,也就是所谓的one-hot编码。

本文想讲的另一种编码方式。pd.factorize()。factorize英文意思:分解,分解为因数,因式分解的意思。有没有想到 factorization machine~~

在这里,pd.factorize()做的也是“因式分解”,把常见的字符型变量分解为数字。

1.为什么需要pd.factorize()?哑变量变换(get_dummies)不好吗?

个人理解:当一个feature有10几种甚至几百种取值可能的时候,使用get_summies是一件很恐怖的事情。因为:
例如feature1取值有[“a”,“b”,…“z”]26中可能的话,那么显然用哑变量就会把这一个feature变为26列。显然增加了数据的稀疏性,并且没有意义(视情况而定)。这时候或许就可以用pd.factorize()了。他会把他们分解为0-25种数字。同时1列字符串经过变换后仍是一列。就不会使得数据集看上去很臃肿了。
下面来看个实例吧。

2.kaggle数据实例展示

我们现在有一批微软公司一些设备的数据:

具体数据什么意思不用在意,我们只需要关注我画红框的两列数据,这是引擎与app的版本号。显然需要编码,不然哪个模型能看得懂这个?
拿EngineVersion为例:
怎么编码呢?来个onehot如何?

我擦,上面一看这一列有25种取值呢?这就遇到了上面说的情况,onehot编码会把这一列变成25列,实在不是一种好主意。试试pd.factorize?

aaa = pd.factorize(train['EngineVersion'])
aaa
  • 1
  • 2



可以看到转换后,那些设备号变成了0-24的数字呢~这就对了。同时注意转换后是一个元组:
从上图也能看出来:这个元组包含两个array,分别是我们想要的数字,以及原来的index,那些设备号,所以我们真正使用应该这样用:

aaa = pd.factorize(train['EngineVersion'])
train["EngineVersion"] = aaa[0]
  • 1
  • 2

3.factorize真的有这么好用吗?

我想这个答案存在争议,或者说是肯定有应用场合,但目前我觉得它有如下的缺陷:
即它把字符串映射成的数字的规则是先看见的小,后看见的大。意思就是这一列的第一行,必定为0,第二行如果和第一行的取值不同,就为1,否则就是0.以此类推。也就是说它忽略了字符串代表的含义。在我们这里,设备号应该是越大越先进。而它就没有表现出来。所以在这里我认为用map映射编码更好:
即把设备号小的映射为小数字,大的为大数字,依次排序。
当然我这里也没有认真去拍,意思知道就可以了~~

mapdict = {'1.1.15100.1':23, '1.1.14600.4':10,'1.1.15200.1':3, '1.1.15300.6':4,'1.1.13504.0':5, '1.1.14800.3':6, '1.1.15000.2':7, '1.1.14104.0':8,'1.1.13804.0':8, '1.1.14306.0':8, '1.1.15000.1':8, '1.1.13407.0':8,'1.1.14405.2':8, '1.1.14901.4':8, '1.1.14700.3':8, '1.1.14202.0':8,'1.1.13303.0':8, '1.1.13701.0':8, '1.1.13000.0':8, '1.1.15300.5':8,'1.1.14500.5':8, '1.1.14700.5':8, '1.1.14003.0':8, '1.1.13601.0':8,'1.1.13903.0':8

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
bbb = train.EngineVersion.map(mapdict)
bbb.head()
  • 1
  • 2


ok~~overover

                                </div><div><div></div></div><link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-60ecaf1f42.css" rel="stylesheet"></div>

详解pandas编码函数pd.factorize()相关推荐

  1. python怎么画参数函数图像_详解pandas.DataFrame.plot() 画图函数

    首先看官网的DataFrame.plot( )函数 DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False, share ...

  2. python read_excel 参数_详解pandas库pd.read_excel操作读取excel文件参数整理与实例

    详解pandas库pd.read_excel操作读取excel文件参数整理与实例 来源:中文源码网    浏览: 次    日期:2019年11月5日 详解pandas库pd.read_excel操作 ...

  3. python中的iloc函数_详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据

    pandas的DataFrame对象,本质上是二维矩阵,跟常规二维矩阵的差别在于前者额外指定了每一行和每一列的名称.这样内部数据抽取既可以用"行列名称(对应.loc[]方法)",也 ...

  4. pandas数据清洗:drop函数案例详解、dropna函数案例详解、drop_duplicates函数案例详解

    pandas数据清洗:drop函数.dropna函数.drop_duplicates函数详解 1 drop函数简介 1.1 构建学习数据 1.2 删除行两种方法 1.3 删除列两种方法 2 dropn ...

  5. python read_excel header_详解pandas库pd.read_excel操作读取excel文件参数整理与实例

    除了使用xlrd库或者xlwt库进行对excel表格的操作读与写,而且pandas库同样支持excel的操作:且pandas操作更加简介方便. 首先是pd.read_excel的参数:函数为: pd. ...

  6. 一文详解Pandas

    一文详解Pandas 一.Pandas概述 二.Pandas数据结构 2.1 Series 2.2 DataFrame数据结构 二.数学与统计计算 三.DataFrame的文件操作 3.1 读取文件 ...

  7. python替换缺失值_详解Pandas 处理缺失值指令大全

    前言 运用pandas 库对所得到的数据进行数据清洗,复习一下相关的知识. 1 数据清洗 1.1 处理缺失数据 对于数值型数据,分为缺失值(NAN)和非缺失值,对于缺失值的检测,可以通过Python中 ...

  8. dataframe groupby_详解pandas中的map、apply、applymap、groupby、agg.

    一.简介 pandas提供了很多方便简洁的方法,用于对单列.多列数据进行批量运算或分组聚合运算,熟悉这些方法后可极大地提升数据分析的效率,也会使得你的代码更加地优雅简洁. 本文就将针对pandas中的 ...

  9. 【原创干货】6000字、22个案例详解Pandas数据分析/预处理时的实用技巧,超简单...

    上两篇原创的文章,小编主要是讲了数据可视化方面的内容,但是好像看得人不是很多的样子(搞得小编心里拔凉拔凉的....) [硬核干货]4500字.10个案例分享几个Python可视化小技巧,助你绘制高质量 ...

最新文章

  1. 1049 Counting Ones
  2. Windows10安装Mysql5.7.19.0 msi 版本报错
  3. AJAX 实现form表单提交
  4. MATLAB实战系列(四)-导入txt文件技巧大全
  5. python3.4.4 配置opencv3.1 解决pip版本不够的问题
  6. CRM_DOC_FLOW_READ_DB debug
  7. java 继承变量_用java中的变量继承
  8. [Ogre][地形]OgreTerrain的实现原理分析
  9. php mysql select where_PHP MySQL Where 子句
  10. R语言作图之ggplot2作图2
  11. 了解链表和二叉树的结构
  12. sass函数:@function
  13. 15.企业应用架构模式 --- 分布模式
  14. 聚焦 | 今年,金山云不一样的除夕夜
  15. android 高仿 猿题库,猿题库(com.fenbi.android.gaozhong) - 9.17.2 - 应用 - 酷安
  16. 漂亮的在线Css字体
  17. 王爽《汇编语言》学习笔记
  18. 官方确认索尼PS5创史上最佳首发记录 国行版可能要2021年见
  19. Android开发中的Log打印日志
  20. 解决vue项目中prettier、eslint格式冲突问题

热门文章

  1. 第十二章 项目采购管理第六版
  2. gridcontrol 添加行删除行
  3. PCB各层的含义(讲的非常易懂清晰)
  4. 生也有涯而知也无涯,以有涯应无涯,殆矣
  5. html盒模型中border的写法,CSS盒模型--边框设置:border: 1px solid red(像素 样式 颜色 ),border-bottom:1px dotted #ccc...
  6. Holy Grail【spfa签到题】
  7. 面试送命题,你为什么从上家公司离职?
  8. c语言程序如何首行缩进,什么叫代码缩进
  9. (34)[NIPS15] Teaching Machines to Read and Comprehend
  10. 《解惑》1棉花糖实验、意志力、延迟满足感?