Python Scikit学习如何将缺少数据的分类值更改为数字值
我正在使用sklearn进行一个机器学习项目,其中一个专栏是分类形式的。我想把它转换成数字形式与序号编码器,然后插补缺失的数据。Sklearn的OrdinalCoder抛出一个错误:Python Scikit学习如何将缺少数据的分类值更改为数字值,python,scikit-learn,imputation,Python,Scikit Learn,Imputation,我正在使用sklearn进行一个机器学习项目,其中一个专栏是分类形式的。我想把它转换成数字形式与序号编码器,然后插补缺失的数据。Sklearn的OrdinalCoder抛出一个错误: ValueError: Input contains NaN 但我真的不想先使用分类插补器,然后再将值转换成数字,因为它不太适合数据的性质。这有什么办法吗 代码如下: from sklearn.preprocessing import OrdinalEncoder ordinalenc = OrdinalEnco
ValueError: Input contains NaN
但我真的不想先使用分类插补器,然后再将值转换成数字,因为它不太适合数据的性质。这有什么办法吗
代码如下:
from sklearn.preprocessing import OrdinalEncoder
ordinalenc = OrdinalEncoder()
imd = ordinalenc.fit_transform(info[["imd_band"]])
print(ordinalenc.categories_)
文件化内联
from sklearn.preprocessing import OrdinalEncoder
import pandas as pd
from sklearn.impute import SimpleImputer
df = pd.DataFrame({'x': ['a','b','b',np.NaN]*3})
ordinalenc = OrdinalEncoder()
# Catagorial to Ordinal of only not NAN values
df.loc[df['x'].notnull(), 'new_x'] = ordinalenc.fit_transform(df[df['x'].notnull()])
# Now impute
im = SimpleImputer(missing_values=np.nan, strategy='most_frequent')
df['new_x'] = im.fit_transform(df['new_x'].values.reshape(-1, 1))
print (df)
输出
x new_x
0 a 0.0
1 b 1.0
2 b 1.0
3 NaN 1.0
4 a 0.0
5 b 1.0
6 b 1.0
7 NaN 1.0
8 a 0.0
9 b 1.0
10 b 1.0
11 NaN 1.0
不幸的是,我在这方面是新手,我不确定我是否理解在我的数据帧中x的等价物是什么。我使用的是开放大学数据集,所以我没有创建自己的数据帧。我从文档中了解到.loc通过标签访问一组列。我的印象是标签和列名不是一回事,当我把它们放在x的位置时,当然没有一个列名起作用。有没有办法按列而不是按标签来选择此数据?例如,此行:info.loc[info['imd_band'].notnull,'new_x']=ordinalenc.fit_transforminfo[info['imd_band'].notnull]生成一个值错误:在使用ndarray进行设置时,len键和值必须相等