如果数据集有缺失值,如何将 python 中的标称数据转换为数字?

How to convert nominal data to numeric in python if dataset has missing value?

我正在使用二进制分类数据集。我想将名义数据转换为 numeric.But 我有缺失值,我不想删除它们,因为我的目标是用 KNN 方法填充主题。我应该怎么做才能将它们转换为数字数据?

age | class
------------
 1 |  NAN
 2 |  yes
 3 |  no
 4 |  NAN
 5 |  no
 6 |  NAN
 7 |  no
 8 |  yes
 9 |  no
10 |  NAN

如果数据集有缺失值,此代码将不起作用

mapping = {label:idx for idx,label in enumerate(np.unique(df['class']))}
df['class'] = df['class'].map(mapping)

在调用 unique 之前过滤掉空值?

import numpy as np
import pandas as pd

df = pd.DataFrame([None, 'yes', 'no', None, 'no',
                   None, 'no', 'yes', 'no', None], columns=['class'])

mapping = {
    label: idx for idx, label in
    enumerate(np.unique(df.loc[df['class'].notnull(), 'class']))
}
df['class'] = df['class'].map(mapping)

print(df)

df:

   class
0    NaN
1    1.0
2    0.0
3    NaN
4    0.0
5    NaN
6    0.0
7    1.0
8    0.0
9    NaN

我不知道您是否有更多 类,这就是您动态分配 mapping 的原因,但对于这种特殊情况:

df['class'] = df['class'].map({'yes': 1, 'no': 0})