0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

十种pandas数据编码的方法分享

数据分析与开发 来源:早起Python 作者:刘早起 2022-05-10 15:33 次阅读

最近在知乎上看到这样一个问题

9a4ba882-cf81-11ec-bce3-dac502259ad0.png

题主表示pandas用起来很乱,事实真的如此吗?本文就将先如何利用pandas来行数据转换/编码的十种方案,最后再回答这个问题。

其实这个操作在机器学习中十分常见,很多算法都需要我们对分类特征进行转换(编码),即根据某一列的值,新增(修改)一列。

为了方便理解,下面创建示例DataFrame
9a5ee8de-cf81-11ec-bce3-dac502259ad0.png

数值型数据

让我们先来讨论连续型数据的转换,也就是根据Score列的值,来新增一列标签,即如果分数大于90,则标记为A,分数在80-90标记为B,以此类推。

自定义函数 + 循环遍历

首先当然是最简单,最笨的方法,自己写一个函数,并用循环遍历,那肯定就是一个def加一个for

df1=df.copy()

defmyfun(x):
ifx>90:
return'A'
elifx>=80andx<90:
        return'B'
elifx>=70andx<80:
        return'C'
elifx>=60andx<70:
        return'D'
else:
return'E'

df1['Score_Label']=None
foriinrange(len(df1)):
df1.iloc[i,3]=myfun(df1.iloc[i,2])

这段代码,相信所有人都能看懂,简单好想但比较麻烦
9a734c5c-cf81-11ec-bce3-dac502259ad0.png

有没有更简单的办法呢?pandas当然提供了很多高效的操作的函数,继续往下看。

自定义函数 + map

现在,可以使用map来干掉循环(虽然本质上也是循环)

df2=df.copy()

defmapfun(x):
ifx>90:
return'A'
elifx>=80andx<90:
        return'B'
elifx>=70andx<80:
        return'C'
elifx>=60andx<70:
        return'D'
else:
return'E'

df2['Score_Label']=df2['Score'].map(mapfun)

结果是同样的
9a734c5c-cf81-11ec-bce3-dac502259ad0.png

自定义函数 + apply

如果还想简洁代码,可以使用自定义函数 + apply来干掉自定义函数

df3=df.copy()
df3['Score_Label']=df3['Score'].apply(lambdax:'A'ifx>90else(
'B'if90>x>=80else('C'if80>x>=70else('D'if70>x>=60else'E'))))

结果和上面是一致的,只不过这么写容易被打。

使用 pd.cut

现在,让我们继续了解更高级的pandas函数,依旧是对Score进行编码,使用pd.cut,并指定划分的区间后,可以直接帮你分好组

df4=df.copy()
bins=[0,59,70,80,100]
df4['Score_Label']=pd.cut(df4['Score'],bins)

9a9422ba-cf81-11ec-bce3-dac502259ad0.png

也可以直接使用labels参数来修改对应组的名称,是不是方便多了

df4['Score_Label_new']=pd.cut(df4['Score'],bins,labels=[
'low','middle','good','perfect'])

9ae84d2c-cf81-11ec-bce3-dac502259ad0.png

使用 sklearn 二值化

既然是和机器学习相关,sklearn肯定跑不掉,如果需要新增一列并判定成绩是否及格,就可以使用Binarizer函数,代码也是简洁好懂

df5=df.copy()
binerize=Binarizer(threshold=60)
trans=binerize.fit_transform(np.array(df1['Score']).reshape(-1,1))
df5['Score_Label']=trans

9afddcb4-cf81-11ec-bce3-dac502259ad0.png

文本型数据

下面介绍更常见的,对文本数据进行转换打标签。例如新增一列,将性别男、女分别标记为0、1

使用 replace

首先介绍replace,但要注意的是,上面说过的自定义函数相关方法依旧是可行的

df6=df.copy()
df6['Sex_Label']=df6['Sex'].replace(['Male','Female'],[0,1])

9b0b4980-cf81-11ec-bce3-dac502259ad0.png

上面是对性别操作,因为只有男女,所以可以手动指定0、1,但要是类别很多,也可以使用pd.value_counts()来自动指定标签,例如对Course Name列分组

df6=df.copy()
value=df6['CourseName'].value_counts()
value_map=dict((v,i)fori,vinenumerate(value.index))
df6['CourseName_Label']=df6.replace({'CourseName':value_map})['CourseName']

9b1b3a66-cf81-11ec-bce3-dac502259ad0.png

使用map

额外强调的是,新增一列,一定要能够想到map

df7=df.copy()
Map={elem:indexforindex,eleminenumerate(set(df["CourseName"]))}
df7['CourseName_Label']=df7['CourseName'].map(Map)

9b2ad944-cf81-11ec-bce3-dac502259ad0.png

使用astype

这个方法应该很多人不知道,这就属于上面提到的知乎问题,能实现的方法太多了

df8=df.copy()
value=df8['CourseName'].astype('category')
df8['CourseName_Label']=value.cat.codes

9b4a5f58-cf81-11ec-bce3-dac502259ad0.png

使用 sklearn

同数值型一样,这种机器学习中的经典操作,sklearn一定有办法,使用LabelEncoder可以对分类数据进行编码

fromsklearn.preprocessingimportLabelEncoder
df9=df.copy()
le=LabelEncoder()
le.fit(df9['Sex'])
df9['Sex_Label']=le.transform(df9['Sex'])
le.fit(df9['CourseName'])
df9['CourseName_Label']=le.transform(df9['CourseName'])

9b59ed1a-cf81-11ec-bce3-dac502259ad0.png

一次性转换两列也是可以的

df9=df.copy()
le=OrdinalEncoder()
le.fit(df9[['Sex','CourseName']])
df9[['Sex_Label','CourseName_Label']]=le.transform(df9[['Sex','CourseName']])

使用factorize

最后,再介绍一个小众但好用的pandas方法,我们需要注意到,在上面的方法中,自动生成的Course Name_Label列,虽然一个数据对应一个语言,因为避免写自定义函数或者字典,这样可以自动生成,所以大多是无序的。

如果我们希望它是有序的,也就是Python对应0Java对应1,除了自己指定,还有什么优雅的办法?这时可以使用factorize,它会根据出现顺序进行编码

df10=df.copy()
df10['CourseName_Label']=pd.factorize(df10['CourseName'])[0]

9b8ca3ea-cf81-11ec-bce3-dac502259ad0.png

结合匿名函数,我们可以做到对多列进行有序编码转换

df10=df.copy()
cat_columns=df10.select_dtypes(['object']).columns

df10[['Sex_Label','CourseName_Label']]=df10[cat_columns].apply(
lambdax:pd.factorize(x)[0])

9ba5f3c2-cf81-11ec-bce3-dac502259ad0.png

总结

至此,我们要介绍的十种pandas数据编码的方法就分享完毕,代码拿走修改变量名就能用,关于这个问题如果你有更多的方法,可以在评论区进行留言~

现在回到文章开头的问题,如果你觉得pandas用起来很乱,说明你可能还未对pandas有一个全面且彻底的了解。

其实就像本文介绍数据编码转换一样,确实有很多方法可以实现显得很乱,但学习pandas的正确姿势就是应该把它当成字典来学,不必记住所有方法与细节,你只需知道有这么个函数能完成这样操作,需要用时能想到,想到再来查就行

原文标题:利用 Pandas 进行分类数据编码的十种方式!

文章出处:【微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码
    +关注

    关注

    6

    文章

    832

    浏览量

    54432
  • 数据转换
    +关注

    关注

    0

    文章

    74

    浏览量

    17888
  • 函数
    +关注

    关注

    3

    文章

    3845

    浏览量

    61215

原文标题:利用 Pandas 进行分类数据编码的十种方式!

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    十种精密全波整流电路

    十种精密全波整流电路
    发表于 08-09 15:09

    AD转换中常用的十种数字滤波法

    AD转换中常用的十种数字滤波法
    发表于 11-17 08:38

    请问怎么做一个跑马灯有十种模式,第十种模式有三音乐,可加速减速和无线遥控?

    我现在想做一个跑马灯,这个跑马灯有十种模式,第十种模式要求有三音乐。,还得有数码管显示第几种模式。可以无线遥控。求哪位大神可以帮我。小女子必有重谢。
    发表于 07-19 04:49

    pandas数据分析的方法

    pandas数据分析中常用方法
    发表于 06-03 06:16

    pandas和seaborn绘图方法

    《利用Python进行数据分析》 92 使用pandas和seaborn绘图
    发表于 10-28 10:25

    pandas是什么?

    的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一
    发表于 07-14 07:48

    pandas是什么

    人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一工具
    发表于 08-09 07:39

    pandas使用步骤

    、使用步骤1.引入库2.读入数据总结前言STM32被广泛应用在控制领域,本此选用STM32F407进行电机实验,此单片机是基于arm-cortem4为核心。一、pandas是什么?示例:pandas 是基于NumPy 的一
    发表于 08-10 07:50

    怎样将YUV420SP的数据编码成JPEG图片呢

    我使用了A40i的硬件解码库,需要将YUV420SP的数据编码成JPEG图片,参考的是原厂技术文档的《视频编码库概要设计报告》,整个流程已经走通,图片也已经顺利生成,但是我输入的是800x480
    发表于 01-04 07:19

    pandas是什么?

    人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一工具
    发表于 01-12 07:53

    pandas是什么?使用步骤有哪些呢

    一、pandas是什么?示例:pandas 是基于NumPy 的一工具,该工具是为了解决数据分析任务而创建的。二、使用步骤##简易计算器//完成两个一位
    发表于 01-12 07:51

    十种精密全波整流电路原图分享

    十种精密全波整流电路原图,大家点评下
    发表于 11-27 06:47

    数据编码技术

    2.2  数据编码技术2.2.1  数字数据的数字信号编码2.2.2  数字数据的模拟信号编码2.2.3&nb
    发表于 06-27 21:45 0次下载

    十种方法能保护云数据安全

    十种方法能保护云数据安全
    发表于 01-14 12:00 12次下载

    基于压缩感知的无线传感器网络的数据编码方亮

    基于压缩感知的无线传感器网络的数据编码_方亮
    发表于 03-15 08:00 0次下载