Python Scikit学习:如何处理无序类型错误?

Python Scikit学习:如何处理无序类型错误?,python,scikit-learn,anaconda,spyder,python-3.5,Python,Scikit Learn,Anaconda,Spyder,Python 3.5,我正在使用Python3.5根据train.csv中的数据预测test.csv中的一些数据。 在执行数据扫描时,我转换train.csv的行和列,这非常好。但是当对test.csv执行相同操作时,它会给出一个: TypeError:无序类型:float()>str() 错误部分 test.DayOfWeek = le.fit_transform(test.DayOfWeek) test.PdDistrict = le.fit_transform(test.PdDistrict) 两个问题。您不

我正在使用Python3.5根据train.csv中的数据预测test.csv中的一些数据。 在执行数据扫描时,我转换train.csv的行和列,这非常好。但是当对test.csv执行相同操作时,它会给出一个:
TypeError:无序类型:float()>str()

错误部分

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

两个问题。您不应该对多个列重复使用相同的
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)

两个问题。您不应该对多个列重复使用相同的
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)

这里只是一个快速的代码片段,可以帮助其他正在搜索的人解决无序类型错误

这个问题(你已经发现了)粘贴在这里,正如在另一个论坛帖子中所发现的:“因为我试图编码的列中基本上存在混合类型。我最终能够通过将每个“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)

这里只是一个快速的代码片段,可以帮助其他正在搜索的人解决无序类型错误

这个问题(你已经发现了)粘贴在这里,正如在另一个论坛帖子中所发现的:“因为我试图编码的列中基本上存在混合类型。我最终能够通过将每个“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)

我尝试过这个,它返回相同的类型错误:(所有列都是字符串吗?如果不是,则应使用一个热编码器。是的。我比较了train.csv和test.csv的数据类型,它们都是相同的,但它们是字符串吗?LabelEncoder仅适用于字符串我相信它显示为对象,即使我尝试将其更改为字符串类型。我尝试了此操作,它返回相同的类型错误:(所有列都是字符串吗?如果不是,则应使用一个热编码器。是的。我比较了train.csv和test.csv的数据类型,它们都是相同的,但它们是字符串吗?LabelEncoder仅适用于字符串我相信它显示为对象,即使我尝试将其更改为字符串类型