pandas 数据格式,

  pandas 数据格式,

  在机器学习中,很多算法都要求我们对分类特征进行变换(编码),即根据某一列的值增加(修改)一列。本文总结了熊猫中的十种数据编码方式,有需要的可以参考。

  00-1010数值数据自定义函数循环遍历自定义函数map自定义函数apply use pd.cut使用sklearn二进制文本数据使用replace使用map使用astype使用sklearn使用因式分解summary大家好,我是一个早起的人。

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

  标题表明熊猫用起来很乱。真的是这样吗?在本文中,我们将首先使用pandas进行数据转换/编码的十种方案,然后回答这个问题。

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

  为了便于理解,下面创建一个示例数据帧。

  

目录

 

  我们先讨论一下连续数据的转换,即根据分数列的值,添加一个新的列标签,即如果分数大于90,则标记为A,如果分数在80-90,则标记为B,以此类推。

  

数值型数据

 

  首先,当然最简单最笨的方法就是自己写一个函数,迭代通过,绝对是一个def加一个for。

  df1=df.copy()

  def myfun(x):

  如果x90:

  返回“A”

  elif x=80和x90:

  返回“B”

  elif x=70和x80:

  返回“C”

  elif x=60和x70:

  返回“D”

  else:

  返回“E”

  df1[分数标签]=无

  对于范围内的I(len(df1)):

  df1.iloc[i,3]=myfun(df1.iloc[i,2])

  这个代码,相信大家都能看懂,简单易记,但是比较平淡。

  有更简单的方法吗?熊猫确实提供了许多有效的功能。请继续阅读。

  

自定义函数 + 循环遍历

 

  现在,您可以使用map来杀死循环(尽管它本质上是一个循环)。

  df2=df.copy()

  def mapfun(x):

  如果x90:

  返回“A”

  elif x=80和x90:

  返回“B”

  elif x=70和x80:

  返回“C”

  elif x=60和x70:

  返回“D”

  else:

  返回“E”

  df2[分数_标签]=df2[分数]。地图(mapfun)

  结果是一样的。

  

自定义函数 + map

 

  如果还想简化代码,可以使用自定义函数apply杀死自定义函数。

  df3=df.copy()

  df3[分数_标签]=df3[分数]。应用(

  x: A if x > 90 else (

   B if 90 > x >= 80 else (C if 80 > x >= 70 else (D if 70 > x >= 60 else E))))

  

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

  

 

  

使用 pd.cut

 

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

  

df4 = df.copy()

 

  

 

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

  

df4[Score_Label_new] = pd.cut(df4[Score], bins, labels=[

 

  

 

  

 

  

使用 sklearn 二值化

 

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

  

df5 = df.copy()

 

  

 

  

 

  

文本型数据

 

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

  

 

  

使用 replace

 

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

  

df6 = df.copy()

 

  

 

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

  

df6 = df.copy()

 

  

 

  

 

  

使用map

 

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

  

df7 = df.copy()

 

  

 

  

 

  

使用astype

 

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

  

df8 = df.copy()

 

  

 

  

 

  

使用 sklearn

 

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

  

from sklearn.preprocessing import LabelEncoder

 

  

 

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

  

df9 = df.copy()

 

  

 

  

使用factorize

 

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

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

  

df10 = df.copy()

 

  

 

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

  

df10 = df.copy()

 

  

 

  

 

  

总结

 

  至此,我要介绍的十种pandas数据编码的方法就分享完毕,代码拿走修改变量名就能用

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

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

  以上就是Pandas进行数据编码的十种方式总结的详细内容,更多关于Pandas数据编码的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: