什么是不可解决的类型错误?

时间:2016-01-12 17:42:08

标签: python scikit-learn anaconda spyder python-3.5

我正在使用Python 3.5根据train.csv中的数据预测test.csv中的一些数据。 在执行数据修改时,我转换train.csv的行和列,它们工作得很好。但是当与test.csv做同样的事情时,它给出了一个:
TypeError:unorderable类型: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)

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

以下是一个快速的代码段,可帮助其他正在搜索的人无法解决类型错误。

问题(你已经找到)被粘贴在这里,如另一篇论坛帖子所示:“因为在我试图编码的列中基本上有混合类型。我终于能够通过< strong>将每个'对象'类型列转换为'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)