什么是Data Conversion Warning?使用LabelEncoder触发该警告如何解决?
LabelEncoder警告问题解决
报错原因
你遇到的警告核心原因是入参格式不匹配:
- 代码中
data[["gender"]]使用双层方括号取列,得到的是二维的DataFrame列向量结构 LabelEncoder.fit_transform()要求传入的分类特征是一维数组,格式不匹配所以触发警告
提示中提到的ravel()方法作用就是将高维数组压缩为一维数组,刚好匹配接口的入参要求。
ConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
解决方法
两种方案都可以消除警告,按需选择即可:
方案1:按提示使用ravel()转换
在取列的代码后追加.values.ravel(),将二维结构转为一维数组:
from sklearn.preprocessing import LabelEncoder lbl=LabelEncoder() data["gender_code"]=lbl.fit_transform(data[["gender"]].values.ravel()) data["race/ethnicity_code"]=lbl.fit_transform(data[["race/ethnicity"]].values.ravel()) data["parental level of education_code"]=lbl.fit_transform(data[["parental level of education"]].values.ravel()) data["lunch_code"]=lbl.fit_transform(data[["lunch"]].values.ravel()) data["test preparation course_code"]=lbl.fit_transform(data[["test preparation course"]].values.ravel())
方案2:改用单层方括号取列(更简洁,推荐)
直接用单层方括号data["列名"]取列,得到的本身就是一维Series结构,不需要额外转换即可直接传入接口:
from sklearn.preprocessing import LabelEncoder lbl=LabelEncoder() data["gender_code"]=lbl.fit_transform(data["gender"]) data["race/ethnicity_code"]=lbl.fit_transform(data["race/ethnicity"]) data["parental level of education_code"]=lbl.fit_transform(data["parental level of education"]) data["lunch_code"]=lbl.fit_transform(data["lunch"]) data["test preparation course_code"]=lbl.fit_transform(data["test preparation course"])
内容的提问来源于stack exchange,提问作者Abraham Ken
相关产品推荐
相关产品推荐

