【问题标题】:LabelEncoder error using Sklearn in a for loop在 for 循环中使用 Sklearn 的 LabelEncoder 错误
【发布时间】:2017-01-23 03:58:21
【问题描述】:

我正在使用 spyder 2 运行 Python 3,当我尝试运行此代码时:

from sklearn.preprocessing import LabelEncoder
cv=train.dtypes.loc[train.dtypes=='object'].index
print (cv)

le=LabelEncoder()
for i in cv:
    train[i]=le.fit_transform(train[i])
    test[i]=le.fit_transform(test[i])

我收到此错误:

le=LabelEncoder()
for i in cv:
    train[i]=le.fit_transform(train[i])
    test[i]=le.fit_transform(test[i])


Traceback (most recent call last):

  File "<ipython-input-5-8739984f61b2>", line 3, in <module>
    train[i]=le.fit_transform(train[i])

  File "C:\Users\myname\Anaconda3\lib\site-packages\sklearn\preprocessing\label.py", line 127, in fit_transform
    self.classes_, y = np.unique(y, return_inverse=True)

  File "C:\Users\myname\Anaconda3\lib\site-packages\numpy\lib\arraysetops.py", line 195, in unique
    perm = ar.argsort(kind='mergesort' if return_index else 'quicksort')

TypeError: unorderable types: str() > float()

奇怪的是,如果我在数据中的指定列上调用编码器,则输出成功。例如:

le.fit_transform(test['Race'])

结果:

le.fit_transform(test['Race'])
Out[7]: array([2, 4, 4, ..., 4, 1, 4], dtype=int64)

我试过了:

float(le.fit_transform(train[i]))
str(le.fit_transform(train[i]))

两者都没有工作。

有人可以帮帮我吗?

【问题讨论】:

    标签: python scikit-learn label transform encoder


    【解决方案1】:

    也有同样的问题。结果我错过了检查缺失值。 检查您是否还有剩余(在您的情况下):

    print(train.apply(lambda x : sum(x.isnull())))
    print(test.apply(lambda x : sum(x.isnull())))
    

    如果你有一些要么用参数替换它们(平均值、中值、模数...) 或者简单地将它们编码为字符串,即对于任意变量 VAR :

    parameter = train[VAR].mean() # parameter = "Nan"
    train[VAR].fillna(parameter, inplace = True ) 
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 2017-08-13
      • 2017-06-06
      • 1970-01-01
      • 2017-07-26
      • 2012-07-29
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      相关资源
      最近更新 更多