一种热编码在python中提供nan值

问题描述

我有一个分类案例研究,其中使用了Logistic回归模型。我想使用“一次热编码”将我的分类列(SalStat)值转换为0和1。这是我的代码

data2["SalStat"] = data2["SalStat"].map({"less than or equal to 50,000":0,"greater than 50,000":1})
print(data2["SalStat"])

以上代码不会将值转换为01,而是将它们转换为nan! 我要去哪里错了?

PS:SalStat列将行分类为“小于或等于50,000”或“大于50,000”

解决方法

我认为问题可能出在您定义的映射器上。 如果文本中有一些空格怎么办。 看看这个answer

,

我猜是因为SalStat列中的值,它引发了错误。 最好将它们分配给变量,而不要手动输入。

val_1 = data2["SalStat"].unique()[0]
val_2 = data2["SalStat"].unique()[1]

data2["SalStat"] = data2["SalStat"].map({val_1 :0,val_2 :1})
print(data2["SalStat"])
,

对于一键编码过程,我建议您尝试pd.get_dummies(data2 ['SalStat'])。这是熊猫提供的一种方法,它将对分类特征执行一键编码。 .get_dummies()方法实际上是一键编码的简写形式。如果您想长时间进行OHE,可以-

from sklearn.preprocessing import OneHotEncoder

这是一种用于将分类类转换为二进制特征的预处理技术。在“一键编码”过程中,每个分类类将成为其自己的功能,包括二进制数据类型,其中一个(1)表示该类的存在,零(0)表示否则。例如:

from sklearn.preprocessing import OneHotEncoder
import pandas as pd

dataframe = pd.DataFrame({'Name': ['Jack','Mary','Sheldon']})

print(dataframe)
print(' ')

technique = OneHotEncoder(sparse=False,drop=None,categories='auto',handle_unknown='error')

new_dataframe = pd.DataFrame(technique.fit_transform(dataframe),columns=technique.categories_)

print(new_dataframe)

原始数据框:

      Name
0     Jack
1     Mary
2  Sheldon

新数据框:

  Jack Mary Sheldon
0  1.0  0.0     0.0
1  0.0  1.0     0.0
2  0.0  0.0     1.0