我使用Python 2.7,并使用名为pd.read_excel(my_path, encoding="utf-8")
的{{1}}创建了一个pandas DataFrame。其中一个列名为'Descrição'。
我在名为my_reader
的列表中包含了所有列名称。
当我尝试使用我的列表数据作为client_list
的索引时,我收到错误
my_reader
它适用于仅包含英文字母的所有其他数据。当我打印KeyError: 'Descri\xc3\xa7\xc3\xa3o'
时,我得到了正确显示的名称
client_list
但是
print client_list[0]
Descrição
所以我不能用
client_list[0]
'Descri\xc3\xa7\xc3\xa3o'
有什么想法吗?
由于
答案 0 :(得分:0)
当您使用encoding="utf-8"
作为数据帧的索引时,您的数据框保存为'Descri\xc3\xa7\xc3\xa3o'
,使用"utf-8"
更好地对其进行解码,然后您就可以获取数据。例如:
import pandas as pd
my_reader = pd.read_excel('comparison.xlsx',encoding="utf-8")
my_reader
my_reader
将是:
Col_1 Col_2 file Descrição
0 Abc Abk cnl DFSDF
1 Nck Nck Abk DSFAF
2 xkl cnl Abc FDAS
3 mzn mzn NaN DFAS
您可以使用:
my_reader['Descrição'.decode('utf-8')]
这会给你结果:
0 DFSDF
1 DSFAF
2 FDAS
3 DFAS
Name: Descrição, dtype: object
对于其他列,您还可以使用unicode
跟踪:
my_reader['Col_2'.decode("utf-8")]
输出:
0 Abk
1 Nck
2 cnl
3 mzn
Name: Col_2, dtype: object
答案 1 :(得分:0)
您的列名列表是str
编码中的utf-8
列表。但是pandas列有unicode
个字符串作为名称,因此最简单的解决方案是将列名列表“解码”为unicode
。
client_list = [ c.decode("utf8") for c in client_list ]
我无法看到您的数据框,但我会打赌所有列,而不仅仅是非ascii列,是unicode
字符串。其他列名称没有给你带来麻烦的原因是Python 2在幕后做了很多隐式转换(pandas
可能会添加一些自己的转换)。使用ascii字符串,str
和unicode
之间的映射是微不足道的,但对于非ascii事物,它依赖于编码。所以只需将整个名称列表转换为unicode即可。更好的是,将所有文本处理迁移到unicode,如同有时处理非ascii数据的任何应用程序所推荐的那样。
更好地解决你的困境就是切换到Python 3.它对非ascii编码的处理更直观,更健壮 - 你可能会发现你的代码“只是工作”,就像它一样在Python 3下为我做了。