2016-12-26 9 views
0

かなり複雑なPythonプログラムを作成しようとしていますが、私はちょっとした小さな細部に問題があります。UnicodeEncodeError: 'ascii'コーデックは0-2の位置にある文字をエンコードできません:序数は範囲外です(128)

問題のコードセクションは、このです:

newData = kmeans.sampleNewData(200, means, covariances, priors) 

newData = newData.astype(str) 
...loops and logic and stuff... 
newData[i, j] = columnsList[j][(indexList[j]).index(closestFit)] 

基本的に、newDataはfloat型の数で満たされた4によってnumpyのマトリクスサイズ200、です。私はその後、astypeメソッドを使用して文字列に変換します。

次に、newDataというエントリに、この文字列を入力してみます。columnsList[j][(indexList[j]).index(closestFit)]

問題はcolumnsList[j][(indexList[j]).index(closestFit)]が必ずしも英語であるとは限りません。それは、例えば、ヘブライ語である可能性があります。その場合には - 私はエラー

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

を得ることは、私はそう、我々はUTF-8でエンコードされている、と私はcolumnsList[j][(indexList[j]).index(closestFit)]を印刷するとき、それは確かに正しい値を出力# -*- coding: utf-8 -*-を書かれていることは注目に値します。それで私たちはそれを印刷することができます。しかし何らかの理由で私はそれをnewData行列に入れることはできません。

+0

'astype(str)'がバイト文字列配列を作成している可能性があります。 'dtype'とは何ですか?それはASCIIです。これらの余分な文字を保持するには、unicode dtypeを指定する必要があります。 – hpaulj

答えて

0

Encodeは、文字列型からバイト型に変換しようとしているときの操作です。あなたのcolumnsList[j][(indexList[j]).index(closestFit)]は、Unicode文字列が含まれていることを、と思われるので、代わりに

newData[i, j] = columnsList[j][(indexList[j]).index(closestFit)].encode('utf-8')

を試してみてください。

+0

「AttributeError: 'float'オブジェクトに「エンコード」属性がありません」というエラーが表示されます –

+0

最初に、どの種類のデータを保持できるか調べる必要があります。もちろん、Unicode文字列ではなく、浮動小数点数を持つ場合は、エラーが発生します。したがって、エンコードする前にセル値のタイプを確認してください。どのような種類のデータがありますか? –

+0

よく、columnsList [j] [(indexList [j]).index(closestFit)]を出力すると、ペルー語を意味するヘブライ語の文字列である "פרו"が出力されます。そのタイプを印刷しようとすると、「Unicodeオブジェクトに属性タイプがありません」というエラーが表示されます –

関連する問題