Python UnicodeEncodeError:&x27;ascii';编解码器可以';t编码位置0-2的字符:序号不在范围内(128)

Python UnicodeEncodeError:&x27;ascii';编解码器可以';t编码位置0-2的字符:序号不在范围内(128),python,numpy,encoding,Python,Numpy,Encoding,我正试图编写一个相当复杂的Python程序,但基本上已经完成了。我在一个小细节上遇到了麻烦 问题代码部分如下所示: 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)]

我正试图编写一个相当复杂的Python程序,但基本上已经完成了。我在一个小细节上遇到了麻烦

问题代码部分如下所示:

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
是一个大小为200×4的numpy矩阵,填充了float类型的数字。然后使用
astype
方法将它们转换为字符串

然后,我尝试将这个
列列表[j][(indexList[j]).index(closestFit)]
放入
新数据的条目中

问题在于
columnsList[j][(indexList[j]).index(closestFit)]
不一定是英语。例如,它可以是希伯来语。在这种情况下,我得到了错误

UnicodeEncodeError:“ascii”编解码器无法对位置0-2中的字符进行编码:序号不在范围内(128)


值得注意的是,我已经编写了
#-*-编码:utf-8-*-
,因此我们使用utf-8编码,当我打印
columnsList[j][(indexList[j]).index(closestFit)]
时,它确实打印了正确的值。所以我们可以把它打印出来。但由于某些原因,我无法将其放入
newData
矩阵。

当您试图将字符串类型转换为字节时,Encode是一种操作。您的
列列表[j][(indexList[j]).index(closestFit)]
似乎包含Unicode字符串,所以请尝试

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


相反。

给出了错误“AttributeError:‘float’object没有属性‘encode’”,首先我们需要弄清楚我们可以拥有哪些类型的数据。当然,如果我们使用的是float而不是Unicode字符串,就会出现错误。因此,在进行编码或任何操作之前,请尝试验证单元格值的类型。您可能有哪些类型的数据?当我打印columnsList[j][(indexList[j]).index(closestFit)]时,它会输出“פרו”,这是一个希伯来文字符串,意思是秘鲁。当我试图打印它的类型时,我得到了一个错误“Unicode对象没有属性类型”,如何打印类型?请尝试打印(type(columnsList[j][(indexList[j]).index(closestFit)))。我假设您的数据有多种类型。Unicode、str、float、smth等。
astype(str)
可能正在创建字节字符串数组。什么是
dtype
。这是ASCII码。您可能需要指定Unicode数据类型来保存这些额外的字符。