2016-08-05 3 views
2

python3に基づいてCrab(オープンソースの推奨システム)でテストを実行しようとしました。その後、エラーが発生しました:エラー: 'Numpy.str_'オブジェクトに 'decode'属性がありません

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/Dennis/anaconda/lib/python3.5/site-packages/scikits/crab/datasets/base.py", line 201, in load_sample_movies 
    data_songs[u_ix][i_ix] = float(rating) 
ValueError: could not convert string to float: "b'3.0'" 

私は、文字列を変換するために、「デコード()」を使用しようとしたが、それは働いていない:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/Dennis/anaconda/lib/python3.5/site-packages/scikits/crab/datasets/base.py", line 202, in load_sample_movies 
    rating = rating.decode('utf-8') 
AttributeError: 'numpy.str_' object has no attribute 'decode' 

を任意の助けが理解されるであろう!

+0

"b'3.0 '"はUnicode、Py3のデフォルト文字列型です。したがって、 'encode'はありますが、' decode'はありません。しかし、それは引用の余分な層に乗ることはありません。 – hpaulj

答えて

2

問題はratingは、文字列内の文字列であるので、あなたは、フロートに"b'3.0'"のような文字列をキャストしようとすると、あなたはまだフロートに変換することはできません前にbを持っているので、それはvalueErrorを与えるということです。

私はあなたが'3.0'の前にバイトエンコードを必要と想像し、その一つの方法は、(evalは、いくつかの安全性の問題を持つことができます、しかし、注意してください)フロートにそれを型キャストする前にバイトに文字列から、それを変換するratingを評価するだろう。

>>> type(eval(rating)) 
<class 'bytes'> 
>>> data_songs[u_ix][i_ix] = float(eval(rating)) 
関連する問題