【问题标题】:How to convert nominal data to numeric in python if dataset has missing value?如果数据集缺少值,如何在python中将名义数据转换为数字?
【发布时间】:2021-08-04 20:39:19
【问题描述】:

我正在使用二进制分类数据集。我想将名义数据转换为数字。但我有缺失值,我不想删除它们,因为我的目标是用 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)

【问题讨论】:

  • 您的意思是要将“是”/“否”值替换为数值,即 0 和 1?
  • @sandertjuh 是的,但我不知道如何处理丢失的数据,因为我的目标是使用 KNN 找到它们。

标签: python python-3.x pandas data-mining missing-data


【解决方案1】:

在调用 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})

【讨论】:

  • 如果我有多个标称特征我该怎么办我可以使用数组吗?
猜你喜欢
  • 2021-08-04
  • 2020-09-06
  • 2017-06-21
  • 1970-01-01
  • 2021-04-28
  • 2014-07-06
  • 2012-02-17
  • 2018-05-02
  • 2015-04-14
相关资源
最近更新 更多