问题描述
我有一个分类案例研究,其中使用了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"])
以上代码不会将值转换为0
和1
,而是将它们转换为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