我试图将字符串数据转换为 CSV Excel 工作表中的数字数据。它一直给我一个关于以前未见过的标签的错误,所以我搜索它并发现我们可以使用标签编码器将所有这些值转换为数字。我创建了一个包含需要转换的字符串数据的所有列的列表,并将其放入编码器中,但是,它仍然给我一个错误,提示“以前未见过的标签”。因此,为了检查问题出在哪里,我尝试从列表中删除某些列,当我清除所有列时,它神奇地起作用了。
这是我首先尝试做的。 “cat_cols”仅包含其中包含字符串数据的列。
cat_cols = ['sales_channel', 'trip_type', 'flight_day', 'route']
enc = LabelEncoder()
for col in cat_cols:
xtrain[col] = df[col].astype('str')
xtest[col] = df[col].astype('str')
xtrain[col] = enc.fit_transform(xtrain[col])
xtest[col] = enc.transform(xtest[col])
当我尝试此操作时,Jupyter Lab 不断向我提供有关未见标签的错误。相反,当我将代码更改为:
cat_cols = []#'sales_channel']#, 'trip_type', 'flight_day', 'route']
enc = LabelEncoder()
for col in cat_cols:
xtrain[col] = df[col].astype('str')
xtest[col] = df[col].astype('str')
xtrain[col] = enc.fit_transform(xtrain[col])
xtest[col] = enc.transform(xtest[col])
它工作得非常好,转换了每一列。有人可以向我解释一下吗?
编辑:数据如下:原始 CSV 文件
这是它给我的错误:
ValueError: y contains previously unseen label: PERVTE
我又试了一次,代码已经转换了除“booking_origin”列之外的所有内容。
这是一张图片:使用标签编码后的数据
为什么只省略这一栏?
请改用 OrdinalEncoder。通过正确的设置,它可以处理测试集中存在训练集中没有的值的情况。更多详细信息请参见:sklearn.LabelEncoder,具有以前从未见过的值
from sklearn.preprocessing import OrdinalEncoder
# Create encoder
ordinal_encoder = OrdinalEncoder(handle_unknown='use_encoded_value',
unknown_value=-1)