CatBoost и UnicodeEncodeError - PullRequest
       26

CatBoost и UnicodeEncodeError

0 голосов
/ 10 сентября 2018

Я пытаюсь использовать Python 2.7 и CatBoostRegressor с пандами, но получаю

UnicodeEncodeError: 'ascii' кодек не может кодировать символы в позиции 0-4: порядковый номер не в диапазоне (128)

Я использую бутерброд с Юникодом и читаю csv как: df = pd.read_csv ('out.csv', index_col = 0, encoding = 'utf8').После прочтения данных я выполняю проверку:

print df.apply(lambda x: pd.lib.infer_dtype(x.values))

node        integer
name        unicode
region      unicode
price      floating
hour        integer
year        integer
month       integer
day         integer
dtype: object

Судя по всему, Catboost пытается сделать кодировку, но безуспешно.Как этого избежать?

упрощенный код:

import pandas as pd
from catboost import CatBoostRegressor


lst2 = [100001,100002,100003,100004,100005]
lst3 = [u'Хлеб',u'Молоко',u'Чай',u'Кофеёк',u'Пончики']
lst4 = [100.0,200.1,100.0,3.5,200.0]
lst5 = [876.0,185.1023,101.12698,301.5023,200.0]
lst6 = [1,1,1,1,1]

df = pd.DataFrame({u'node' : lst2, u'name':lst3, u'vol':lst4, u'price':lst5, u'hour':lst6},
                  columns=[u'node', u'name', u'vol', u'price', u'hour'])

train_data = df.iloc[:-2, :]
train_labels = train_data[u'price'].values
train_data = train_data.drop([u'price'], axis = 1)


cat_features = [1]
clf = CatBoostRegressor(iterations=100, learning_rate=0.1, depth=4)
clf.fit(train_data, train_labels, cat_features)

1 Ответ

0 голосов
/ 29 сентября 2018

Это похоже на проблему с Cython.В вашем случае может помочь замена unicode на bytes, например: lst3 = [b'Хлеб',...

...