读取excel文件时的熊猫数据框和字符编码

Posted

技术标签:

【中文标题】读取excel文件时的熊猫数据框和字符编码【英文标题】:Pandas dataframe and character encoding when reading excel file 【发布时间】:2014-06-28 23:31:26 【问题描述】:

我正在阅读一个包含多个数字和分类数据的 excel 文件。列 name_string 包含外语字符。 当我尝试查看 name_string 列的内容时,我得到了我想要的结果,但是外来字符(在 excel 电子表格中正确显示)以错误的编码显示。 这是我所拥有的:

import pandas as pd
df = pd.read_excel('MC_simulation.xlsx', 'DataSet', encoding='utf-8')
name_string = df.name_string.unique()
name_string.sort()
name_string

产生以下内容:

array([u'4th of July', u'911', u'Abab', u'Abass', u'Abcar', u'Abced',
       u'Ceded', u'Cedes', u'Cedfus', u'Ceding', u'Cedtim', u'Cedtol',
       u'Cedxer', u'Chevrolet Corvette', u'Chuck Norris',
       u'Cristina Fern\xe1ndez de Kirchner'], dtype=object)

在最后一行中,正确编码的名称应该是 Cristina Fernández de Kirchner。有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

实际上,数据被正确解析为unicode,而不是strsu 前缀表示对象为unicode。打印列表、元组或 NumPy 数组时,Python 会显示序列中项目的repr。因此,您看到的不是unicode 的印刷版,而是repr

In [160]: repr(u'Cristina Fern\xe1ndez de Kirchner')
Out[160]: "u'Cristina Fern\\xe1ndez de Kirchner'"

In [156]: print(u'Cristina Fern\xe1ndez de Kirchner')
Cristina Fernández de Kirchner

The purpose of the repr 是为每个对象提供一个明确的字符串表示。由于不可见或不可打印的字符,unicode 的打印版本可能会模棱两可。

但是,如果您打印 DataFrame 或 Series,您将获得 unicode 的打印版本:

In [157]: df = pd.DataFrame('foo':np.array([u'4th of July', u'911', u'Abab', u'Abass', u'Abcar', u'Abced',
       u'Ceded', u'Cedes', u'Cedfus', u'Ceding', u'Cedtim', u'Cedtol',
       u'Cedxer', u'Chevrolet Corvette', u'Chuck Norris',
       u'Cristina Fern\xe1ndez de Kirchner'], dtype=object))
   .....:    .....:    .....: 
In [158]: df
Out[158]: 
                               foo
0                      4th of July
1                              911
2                             Abab
3                            Abass
4                            Abcar
5                            Abced
6                            Ceded
7                            Cedes
8                           Cedfus
9                           Ceding
10                          Cedtim
11                          Cedtol
12                          Cedxer
13              Chevrolet Corvette
14                    Chuck Norris
15  Cristina Fernández de Kirchner

[16 rows x 1 columns]

【讨论】:

非常感谢@unutbu。很好的答案,它为我澄清了不止一个模糊的问题。干杯 当我们将值保存到列表中并且我们需要打印列表时如何保存相同的问题。我想看到正确的字符。 @Sigur:打印列表会导致 Python 在列表中以逗号分隔的项目的 repr 周围打印括号。如果你想要物品的str,你需要compose that yourself。如果列表中的对象是 bytes,而不是 (Python3) strs,您可能还需要解码字节。如果此解释和链接不能完全回答您的问题,请打开一个包含所有详细信息的新问题(您的列表的示例 sn-p 和所需的输出)。 @unutbu,谢谢。该链接非常有用。题外话:每次我读到你的昵称时,我都喜欢ubuntu。大声笑

以上是关于读取excel文件时的熊猫数据框和字符编码的主要内容,如果未能解决你的问题,请参考以下文章

蟒蛇。通过url读取文件时的文件编码

excel保存为制表符分隔的文本文件 js无法完整读取

如何确定excel文件的字符编码? [复制]

熊猫数据框和多行值打印为字符串?

(实用篇)PHPExcel读取Excel文件的实现代码

字符编码字符与字节与文件操作