机器学习项目:对布尔数组应用LabelEncoder报ValueError如何解决?
问题分析与解决方法
报错原因
- 切片索引错误:
ruzgar = data.iloc[:,3:4].values取的是数据集的第4列(iloc遵循左闭右开规则,索引3对应第4列),得到的是形状为(14,1)的二维数组。但后续ruzgar[:,3:4]试图访问数组的第3到4列,而该数组仅包含1列(列索引为0),因此这个切片返回的是形状为(14,0)的空数组。 - 形状不匹配:
le.fit_transform(data.iloc[:,3:4])返回的是形状为(14,)的一维数组,无法赋值到形状为(14,0)的空数组中,触发ValueError。
解决方法
方法一:直接处理目标列并赋值(推荐)
无需额外生成数组,直接在DataFrame上完成编码,或者生成正确形状的数组:
data = pd.read_csv('odev_tenis.csv') le = preprocessing.LabelEncoder() # 方式1:直接修改原DataFrame的目标列 data.iloc[:,3] = le.fit_transform(data.iloc[:,3]) # 方式2:生成二维数组形式的编码结果 ruzgar = le.fit_transform(data.iloc[:,3]).reshape(-1, 1)
方法二:修正切片索引
如果要保留原数组操作的逻辑,修正切片索引为数组实际存在的列(索引0):
data = pd.read_csv('odev_tenis.csv') le = preprocessing.LabelEncoder() ruzgar = data.iloc[:,3:4].values # 访问数组的第0列(唯一存在的列)进行赋值 ruzgar[:,0] = le.fit_transform(data.iloc[:,3])
内容的提问来源于stack exchange,提问作者metkopetru
相关产品推荐
相关产品推荐

