如何使用unicode字符串作为pd.DataFrame的索引?

时间:2017-05-17 13:37:04

标签: python pandas dataframe unicode

我使用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'

有什么想法吗?

由于

2 个答案:

答案 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字符串,strunicode之间的映射是微不足道的,但对于非ascii事物,它依赖于编码。所以只需将整个名称列表转换为unicode即可。更好的是,将所有文本处理迁移到unicode,如同有时处理非ascii数据的任何应用程序所推荐的那样。

更好地解决你的困境就是切换到Python 3.它对非ascii编码的处理更直观,更健壮 - 你可能会发现你的代码“只是工作”,就像它一样在Python 3下为我做了。