Имя столбца не найдено, вероятно, потому что символ "Latin-1" распознается как utf-8

Я использую Python 2.7 на ноутбуке Jupyter, используя библиотеку Pandas, и столкнулся со следующей проблемой:

У меня есть набор данных, который содержит символы с акцентами, для извлечения данных из.csv я написал следующий код:

datafile = pd.read_csv("exportacionEmitidas.csv", delimiter=";", 
encoding='latin-1', low_memory=False)

Вот те столбцы, которые я получаю, и которые мне нравятся:

Nº Serie + Nº Factura
Ejercicio
Periodo
Fecha Expedición
Fecha Operacion 
NIF Destinatario
Nombre o Razón Social Destinatario

Однако, когда я пытаюсь создать новый фрейм данных только с некоторыми столбцами, я получаю следующее раздражающее сообщение:

  datafile[["Nº Serie + Nº Factura","Fecha Expedición"]]
KeyError: "['N\\xc2\\xba Serie + N\\xc2\\xba Factura' 'Fecha Expedici\\xc3\\xb3n'] not in index"

Я не хотел бы выбирать столбцы по индексу столбцов, потому что я хотел бы избежать ошибок в случае изменения порядка столбцов.

1 ответ

Решение

Ваши имена столбцов являются объектами Unicode, а не байтовыми строками. Используйте литералы Unicode (с префиксом u) для их решения:

datafile[[u"Nº Serie + Nº Factura", u"Fecha Expedición"]]

Вы можете увидеть это, повторяя имена всех столбцов:

>>> datafile.columns
Index([u'Nº Serie + Nº Factura', u'Ejercicio', u'Periodo', u'Fecha Expedición',
       u'Fecha Operacion', u'NIF Destinatario',
       u'Nombre o Razón Social Destinatario'],
      dtype='object')

Каждое из имен столбцов отображается с использованием того же u'...' строковый литерал синтаксис.

Обратите внимание, что для того, чтобы вы могли использовать не-ASCII-символы в таких строках, вы должны объявить кодек в верхней части исходного файла Python:

# coding: UTF-8
# The above states this source file is saved using UTF-8.

Возможно, вы захотите перейти на Python 3. Python 3 более полно поддерживает Unicode, и Python 2 больше не будет поддерживаться через 18 месяцев.

Другие вопросы по тегам