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
对应0
,Java
对应1
,除了自己指定,还有什么优雅的办法?这时可以使用factorize
,它会根据出现顺序进行编码
df10 = df.copy()
结合匿名函数,我们可以做到对多列进行有序编码转换
df10 = df.copy()
总结
至此,我要介绍的十种pandas
数据编码的方法就分享完毕,代码拿走修改变量名就能用
现在回到文章开头的问题,如果你觉得pandas
用起来很乱,说明你可能还未对pandas
有一个全面且彻底的了解。
其实就像本文介绍数据编码转换一样,确实有很多方法可以实现显得很乱,但学习pandas
的正确姿势就是应该把它当成字典来学,不必记住所有方法与细节,你只需知道有这么个函数能完成这样操作,需要用时能想到,想到再来查就行。
以上就是Pandas进行数据编码的十种方式总结的详细内容,更多关于Pandas数据编码的资料请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。