NaN值的序数编码器问题

问题描述

我有一个数据框,缺少空格作为缺少的值,因此我使用正则表达式将其替换为NaN值。我遇到的问题是当我想使用序数编码来替换分类值时。到目前为止,我的代码如下:

    x=pd.DataFrame(np.array([30,"lawyer","France",25,"clerk","Italy",22," ","Germany",40,"salesman","EEUU",34,50,"France"]
                             
            ).reshape(6,3))
    x.columns=["age","job","country"]
    x = x.replace(r'^\s*$',np.nan,regex=True)

    oe=preprocessing.OrdinalEncoder()
    df.job=oe.fit_transform(df["job"].values.reshape(-1,1))

我遇到以下错误:

Input contains NaN

我希望job列替换为诸如[1,2,-1,3,1,3]之类的数字。 有帮助吗?

谢谢

解决方法

您可以尝试使用sub { $_[0] = 123; }->($foo{a});,注意这里的类别以0开头

factorize
,

sklearn.preprocessing.OrdinalEncoder不允许NaN。如果要使用它,则需要先将NaN拖放到OrdinalEncoder上,然后将结果分配回该列和fillna

from sklearn import preprocessing

oe = preprocessing.OrdinalEncoder()
x.loc[x.job.notna(),['job']] = oe.fit_transform(x["job"].dropna().values.reshape(-1,1))
x['job'] = x.job.fillna(-1)

Out[52]:
  age  job  country
0  30  1.0   France
1  25  0.0    Italy
2  22 -1.0  Germany
3  40  2.0     EEUU
4  34  1.0      NaN
5  50  2.0   France

注意clerklawyer之前的序数排序,因此其序数编码值必须小于lawyer。所以clerk0,而lawyer1

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...