Подтвердить что ты не робот

Pandas dataframe и кодировка символов при чтении файла excel

Я читаю файл 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. Может ли кто-нибудь помочь мне в этом вопросе?

4b9b3361

Ответ 1

Собственно, данные правильно разбираются в unicode, а не strs. Префикс u указывает, что объекты 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

Цель repr - предоставить однозначное строковое представление для каждого объекта. Печатный verson unicode может быть неоднозначным из-за невидимых или непечатаемых символов.

Если вы печатаете DataFrame или Series, вы получите печатную версию юникодов:

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]