Python 在scikitlearn中为系列使用LabelEncoder

Python 在scikitlearn中为系列使用LabelEncoder,python,pandas,machine-learning,scikit-learn,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) 我得到一个错误: 无序类型:float()>str() 列中的序列有3个值。我希望它们分别为0、1、2,但我得到了这个错误 我也试过: l = hsp_

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

from sklearn.preprocessing import LabelEncoder
m = hsp_train["Alley"]
m_enc = LabelEncoder()
j = m_enc.fit_transform(m)
我得到一个错误:

无序类型: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开始。

很明显,序列中缺少值。如果要从序列中删除
NaN
值,只需执行
hsp\u 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:无序类型:float()>str()

默认情况下,执行
pd.factorize
会自动将-1分配给缺少的值,因此您可以获得这些值:

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

如果您不想识别<代码> n>代码>值,将其视为任何字符串,则可以在使用“代码> NaasFiels:

读取过程的同时执行”
df = pd.read_csv(data, na_filter=False, ...)
它还大大提高了读取相对较大文件的性能


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

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

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

谢谢@Nickil的解释,但是如果我想要缺少的值,它实际上是一个被描述为“Na”的类别(熊猫将其作为NaN值),该怎么办要成为第三类吗?据我所知,OneHotEncoder对整数很有用,而pandas.get_dummies会增加我不想要的列数。