使用LabelEncoder为scikitlearn中的一系列

时间:2016-09-14 15:11:31

标签: python pandas machine-learning scikit-learn

我在数据集中有一个列,它有分类值,我想用数值转换它们。我正在尝试使用LabelEncoder,但是这样做会出错。

from sklearn.preprocessing import LabelEncoder
m = hsp_train["Alley"]
m_enc = LabelEncoder()
j = m_enc.fit_transform(m)

我收到错误:

  

unorderable类型:float()> STR()

列中的系列有3个值。我希望它们分别为0,1,2,但我收到了这个错误。

我也试过这个:

l = hsp_train["Alley"]
l_enc = pd.factorize(l)
hsp_train["Alley"] = l_enc[0]

但这给了我值-1,1,2。我不希望它从1开始。

1 个答案:

答案 0 :(得分:3)

很明显,你的系列中缺少值。如果您要从系列中删除NaN值,请执行hsp_train["Alley"].dropna()

<强>插图:

df = pd.DataFrame({'Categorical': ['apple', 'mango', 'apple', 
                                   'orange', 'mango', 'apple', 
                                   'orange', np.NaN]})

使用LabelEncoder对分类标签进行编码:

enc = LabelEncoder()
enc.fit_transform(df['Categorical'])

给出:

  

TypeError:unorderable类型:float()&gt; STR()

默认情况下,pd.factorize会自动为缺失值指定-1,因此您可以获得这些值:

pd.factorize(df['Categorical'])[0]
array([ 0,  1,  0,  2,  1,  0,  2, -1])

如果您不希望识别NAN值并将其视为任何字符串,则可以在使用na_filter阅读流程时执行此操作:

df = pd.read_csv(data, na_filter=False, ...)

它还提高了大幅读取相对较大文件的性能。

或者,您可以使用NaN将所有fillna值填充到您选择的所需字符串中:

df.fillna('Na', inplace=True)

这会将所有NaN值替换为字符串值“Na”,您可以像以前一样继续。