面对无法投入模型训练的object类型数据在头疼,快来使用我的丝滑小连招
创始人
2024-02-18 15:12:03
0

面对无法投入模型训练的object类型数据在头疼,快来使用我的丝滑小连招

 前言

丝滑小连招

tip1- get_dummies完美one-hot(str->int)

tip2 - rename_dims解决重名问题!

 tip3 - insert且drop!​​​​​​​


 前言

        我们先来看一个DataFrame的数据结构,我们可以看到他是由以下几个属性组成的:

● ‘marital’ —— 婚姻状态(类别:结婚、离异、单身)

● ‘‘educatiom——受教育等级(类别:未知、初等、中等、高等)

● ‘‘housing’——有没有房贷(类别:有,无)

● ‘loan’——有没有个人贷款(类别:有,无)

● ‘ ‘y’——有没有同意签署定期存款(类别:有,无)

接下来我将打印他们的信息:

 从Dtype这一栏可以看到他们全部都是object类型,这其实就是说着几个属性下的值都是str字符串类型的。

众所周知,但我们训练模型的时候,我们是不能将字符串类型的数据喂入模型fit的,但遇到数据是字符串类型的情况又不可避免,这个时候我就要介绍我百般摸索下总结出的一套连招啦:get_dummies + rename_dims + drop + insert。这套连招为什么神奇呢?请君往下看:

丝滑小连招

tip1- get_dummies完美one-hot(str->int)

        这个get_dummies有什么用呢?他在我们的丝滑小连招之下又扮演者什么样的角色呢?让我们来揭开他的面纱吧!

以表敬意,我们以education这个属性为例子,毕竟教育教育,教育最重要嘛,先输入以下一行代码:

In [unknow]:

pd.get_dummies(df['education'])

 Out [unkonw]:

 是不是超级神奇,还记得这个属性原来的数据嘛。

没错,如您所想:本来只有一列的属性因为她的值有4个所有分成了4列!然后,例如序号为0 的这个数据的值是teritary, 那么在名为teritary的这一列和序号为0的这一行填上数字1!其余为数字0!这样就实现了one-hot编码,且可以投入模型进行fit训练拟合。

tip2 - rename_dims解决重名问题!

但我们会发现一个问题,很大的问题:

例如这样的数据,都是yes,no那么岂不是重名啦?那我们该怎么办呢?简单!只需要dim_name+'_'+dim_value就ok啦!举个栗子:housing的yes变为housing_yes,而loan的yes变为loan_yes,这不就妥妥搞定嘛!用代码这样子做:

Input [unkonw2]

# Step1、得到one-hot编码后的数据(dataframe类型)new_dim = pd.get_dummies(df[key])# Step2、使用rename函数重命名new_columns = list(new_dim.columns)rename_columns = {}for col in new_columns:rename_columns[col] = key + '_' + colnew_dim.rename(columns=rename_columns, inplace=True)

Output [unkow2]

 tip3 - insert且drop!

我们可以看到事情已经发展到这一步了,已经没什么可说的了!

我们只需要抛弃掉旧情郎,迎接新美男就好了!

这样做:

 # Step3、merge new dim to DataSet and drop the old dimdf = df.drop(columns=key)for dim in new_dim:df[dim] = new_dim[dim].tolist()

但实际上其实并没有这么简单 ,比如有一个很大的问题就是,大多数时候我们的数据是这样的:

没错,数据类型混杂,所以我们不可能简单的遍历整个DataFrame因为非object类型的属性数据是不用one-hot的,那么我们怎么办呢?其实都不用担心我已经全部解决了:DataFrame有一个函数select_dtypes里面有一个include参数可以选择只要数据类型为object的属性,我们使用它,并且使用columns的函数就可以获取所有object类型的属性名了,然后只遍历这些个属性名,再进行丝滑小连招那么我们就打工搞成了!

 最后,我把所有的步骤和这个意外情况的解决办法全部写入一个函数,大家只需要简单的传入一个DataFrame类型的数据,他将帮你自动完成数据的处理,最后还给你一个理想中的数据! 

def one_hot_and_merge_objectDim(df):# 只处理object类型的数据object_type_dims = list(df.select_dtypes(include='object').columns)print(object_type_dims)for key in object_type_dims:print(key + ' is done.')# Step1、get new dim(DataFrame)new_dim = pd.get_dummies(df[key])# Step2、rename new dim new_columns = list(new_dim.columns)rename_columns = {}for col in new_columns:rename_columns[col] = key + '_' + colnew_dim.rename(columns=rename_columns, inplace=True)# Step3、merge new dim to DataSet and drop the old dimdf = df.drop(columns=key)for dim in new_dim:df[dim] = new_dim[dim].tolist()print(df.columns)return df

完毕,是不是超级轻松呢? 

上一篇:关于讳莫的成语

下一篇:莫干山的竹林

相关内容

热门资讯

扎哈罗娃:欧盟仍在试图为没收俄... 当地时间12月19日,俄罗斯外交部发言人扎哈罗娃对欧盟峰会结果发表评论称,欧盟在批准向乌克兰提供新贷...
*ST太和(605081)披露... 截至2025年12月19日收盘,*ST太和(605081)报收于10.57元,较前一交易日下跌1.2...
中方:强烈不满,坚决反对,已多... 政知见2025-12-19 16:39:11 撰文 | 熊颖琪 12月19日,外交部发言人郭嘉昆主...
原创 仿... 【版权申明:本文为@影吹斯汀 独家原创稿,未经许可不得以任何形式抄袭or转载,违者必究!】 由詹姆斯...
女子称在亚朵酒店内用牙签,入口... 原标题:女子称在亚朵酒店内用牙签,入口后猛然发现可能是别人用过的,店方回应 近日,有网友发帖称,自己...
捡到宝了!泰国上将:中国没要求... 当地时间2025年12月15日,泰国国防部长对于,泰国特种兵在战场缴获大批,柬埔寨军人放弃的,中国制...
涉嫌严重违纪违法,李舜被查 据省纪委监委驻省教育厅纪检监察组、玉溪市监委消息:云南省教育厅教材和语言文字管理处原处长、一级调研员...
原创 鞠... 2025年12月19日,最近身陷流言蜚语的鞠婧祎被拍到低调现身街头,这是她与经纪公司丝芭传媒爆发合约...
广州越秀南路有两人受伤,警方通... 12月19日晚,广州市公安局越秀分局发布警情通报:2025年12月19日17时37分,广州110接群...
原创 金... 最近,大家都注意到特朗普单方面宣布允许英伟达对华出售H200芯片。作为交换,美国政府将对H200的所...