首页 > 解决方案 > 当我在数据帧上调用函数时,编码器给出值错误

问题描述

我正在尝试对我的数据框的一列进行 onehotencode,其余列是标签编码的。我正在使用如下代码:

def OneHotEncoder(repair,field):
    oe=preprocessing.OneHotEncoder()
    oe.fit(repair[field])
    np.save('/Users/sayontimondal/Desktop/SKlearn Model/Encoders/'+str(field)+'_enc_classes.npy', oe.classes_)
    repair[field] = repair[field].map(lambda s: 'Other' if s not in oe.classes_ else s)
    repair[field]=oe.transform(repair[field]) 
    return repair[field]

但是当在我的数据框上调用函数时: repair['SALES_ORG_ID']=OneHotEncoder(repair,'SALES_ORG_ID')

我收到一个值错误:无法将字符串转换为浮点数:其他我不明白为什么会发生这种情况,因为当我使用标签编码器做同样的事情时它会起作用。知道我做错了什么吗?

我只想保存编码器类,以便可以在我的验证集中重用它,因此也可以接受任何其他方式。

标签: pythonpandassklearn-pandas

解决方案


我已经像这样连接到我现有的数据框“其他”: Other = pd.DataFrame([['Other','Other','Other','Other','Other']], columns = ['CONFIG_CD','COMPONENT_CD_ISSUE_CD','SOLD_TO_SHIP_TO','SALES_ORG_ID','PART_NO']) repair = pd.concat([repair,Other]) 在此之后,我正在为标签编码器执行以下操作,效果很好:

#label encoder def labelHotEncoder(repair,field): le = preprocessing.LabelEncoder() le.classes_= np.load('/Users/sayontimondal/Desktop/SKlearn Model/Encoders/'+str(field)+'_enc_classes.npy') #np.save('/Users/sayontimondal/Desktop/SKlearn Model/Encoders/'+str(field)+'_enc_classes.npy', le.classes_) repair[field] = repair[field].map(lambda s: 'Other' if s not in le.classes_ else s) repair[field]=le.transform(repair[field]) return repair[field] 然后调用如下函数:

repair['CONFIG_CD']=labelHotEncoder(repair,'CONFIG_CD') repair['COMPONENT_CD_ISSUE_CD']=labelHotEncoder(repair,'COMPONENT_CD_ISSUE_CD') repair['SOLD_TO_SHIP_TO']=labelHotEncoder(repair,'SOLD_TO_SHIP_TO') repair['PART_NO']=labelHotEncoder(repair,'PART_NO')


推荐阅读