Python Scikit学习如何将缺少数据的分类值更改为数字值

Python Scikit学习如何将缺少数据的分类值更改为数字值,python,scikit-learn,imputation,Python,Scikit Learn,Imputation,我正在使用sklearn进行一个机器学习项目,其中一个专栏是分类形式的。我想把它转换成数字形式与序号编码器,然后插补缺失的数据。Sklearn的OrdinalCoder抛出一个错误: ValueError: Input contains NaN 但我真的不想先使用分类插补器,然后再将值转换成数字,因为它不太适合数据的性质。这有什么办法吗 代码如下: from sklearn.preprocessing import OrdinalEncoder ordinalenc = OrdinalEnco

我正在使用sklearn进行一个机器学习项目,其中一个专栏是分类形式的。我想把它转换成数字形式与序号编码器,然后插补缺失的数据。Sklearn的OrdinalCoder抛出一个错误:

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键和值必须相等