问题描述
我有一个数据框,缺少空格作为缺少的值,因此我使用正则表达式将其替换为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
注意:clerk
是lawyer
之前的序数排序,因此其序数编码值必须小于lawyer
。所以clerk
是0
,而lawyer
是1