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