我正在尝试将Python 2.7和CatBoostRegressor与Pandas一起使用,但是我明白了
UnicodeEncodeError:'
ascii
'编解码器无法在 0-4位置:序数不在(128)范围内
我使用unicode三明治并将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)
答案 0 :(得分:0)
这看起来像cython的问题。
在您的情况下可能有用的是将unicode
替换为bytes
,如下所示:
lst3 = [b'Хлеб',...