一种热编码在 python 中给出 nan 值

One Hot Encoding giving nan values in python

我有一个使用逻辑回归模型的分类案例研究。我想使用 One Hot Encoding 将我的分类列 (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"])

对于One-Hot编码的过程,建议你尝试pd.get_dummies(data2['SalStat'])。它是 pandas 提供的一种方法,将对分类特征进行 One-Hot 编码。 .get_dummies() 方法实际上是对One-Hot 的short-hand 编码。如果您想长期进行 OHE,您可以 -

from sklearn.preprocessing import OneHotEncoder

这是一种预处理技术,用于将我们的分类 classes 转换为二进制特征。在 One-Hot 编码过程中,每个分类 class 将成为它自己的特征,由二进制数据类型组成,其中一个 (1) 表示存在 class,零 (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