Scikit-Learn:如何处理不可排序的类型错误?

Posted

技术标签:

【中文标题】Scikit-Learn:如何处理不可排序的类型错误?【英文标题】:Scikit-Learn: How to deal with an unorderable types error? 【发布时间】:2016-04-17 11:09:26 【问题描述】:

我正在使用 Python 3.5 根据 train.csv 中的数据预测 test.csv 中的一些数据。 在执行数据处理时,我转换了 train.csv 的行和列,效果很好。但是当对 test.csv 做同样的事情时,它会给出一个 : TypeError:不可排序的类型:float() > str()

train = pd.read_csv('train.csv', header = 0, parse_dates = True, low_memory= False)
test = pd.read_csv('test.csv' , header =0, parse_dates = True, low_memory= False)

le = preprocessing.LabelEncoder()

train.Category = le.fit_transform(train.Category)
train.DayOfWeek = le.fit_transform(train.DayOfWeek)
train.PdDistrict = le.fit_transform(train.PdDistrict)

错误部分

test.DayOfWeek = le.fit_transform(test.DayOfWeek)
test.PdDistrict = le.fit_transform(test.PdDistrict)

【问题讨论】:

【参考方案1】:

两个问题。您不应该对多个列重复使用相同的 LabelEncoder。否则您将丢失映射并且无法转换您的测试数据。

category_le = preprocessing.LabelEncoder()
day_of_week_le = preprocessing.LabelEncoder()
pd_district_le = preprocessing.LabelEncoder()

train_category = category_le.fit_transform(train.Category)
train_day_of_week = day_of_week_le.fit_transform(train.DayOfWeek)
train_pd_district = pd_district_le.fit_transform(train.PdDistrict)

train_X = np.hstack([train_category_mat, train_day_of_week_mat, pd_district_le])

test_category = category_le.transform(test.Category)
test_day_of_week = day_of_week_le.transform(test.DayOfWeek)
test_pd_district = pd_district_le.transform(test.PdDistrict)

【讨论】:

我试过这个,它返回相同的 TypeError :( 所有列都是字符串吗?如果不是,则应使用一个热编码器。 是的。我已经将 train.csv 的 dtypes 与 test.csv 进行了比较,它们都是相同的 但它们是字符串吗? LabelEncoder 仅适用于我相信的字符串 即使我尝试将其更改为字符串类型,它也会显示为对象【参考方案2】:

这里只是一个快速的代码 sn-p 来帮助解决不可排序的类型错误,供其他正在搜索的人使用。

问题(您已经找到)粘贴在这里,如在另一个论坛帖子中发现的那样:“因为在我试图编码的列中基本上存在混合类型。我终于能够通过 将每个 'object' 类型列转换为 'str' 类型并停止错误。”

处理缺失数据后,此代码可用于遍历匹配一组数据类型的列,并将它们转换为字符串,使用.astype(str) 属性。

#REPLACE NAN WITH 0
X_train.fillna(0.0, inplace=True)

#GET LIST OF COLUMNS TO ENCODE
cols_to_enc = list(X_train.select_dtypes(include=['category', 'object']))

for feature in cols_to_enc:
    try:
        #CONVERT VALUE TO STRING (TO AVOID UNORDERED TYPE ERRORS)
        X_train[feature] = X_train[feature].astype(str)
    except Exception as err:
        print('cannot convert: %s' %  feature)
        print(err)

【讨论】:

以上是关于Scikit-Learn:如何处理不可排序的类型错误?的主要内容,如果未能解决你的问题,请参考以下文章

asp.net mvc 中模型验证如何处理数组呢?

从 DataAdapter 拉数据时如何处理 DBNull

反向传播算法如何处理不可微的激活函数?

您如何处理排序、分页和过滤的参数?

Keras 如何处理多标签分类?

企业如何处理危机公关?