Python pandas to_excel 'utf8' кодек не может декодировать байт

Я пытаюсь выполнить некоторую работу с данными в Python pandas и не могу написать свои результаты. Я прочитал свои данные как CSV файл и экспортировал каждый script в качестве собственного CSV файла, который отлично работает. В последнее время, хотя я попытался экспортировать все в один файл Excel с листами, а некоторые из листов дают мне ошибку

"'utf8' кодек не может декодировать байт 0xe9 в позиции 1: недопустимый байт продолжения"

Я не знаю, как начать поиск любых символов, которые могут вызвать проблемы с экспортом в Excel. Не уверен, почему он экспортирует в CSV только штраф, хотя: (

соответствующие строки

from pandas import ExcelWriter
data = pd.read_csv(input)
writer = ExcelWriter(output) #output is just the filename
fundraisers.to_excel(writer, "fundraisers")
locations.to_excel(writer, "locations") #error
locations.to_csv(outputcsv) #works
writer.save()

печатающая головка оскорбительного фрейма данных

Event ID    Constituent ID  Email Address   First Name  \   Last Name
f       1       A       A       1
F       4       L       R       C
M       1       1       A       D
F       4       A       A       G
M       2       0       R       G
M       3       O       O       H
M       2       T       E       H
M       2       A       A       H
M       2       M       M       K
F       3       J       E       K
Location ID raised  raised con  raised email
a   0   0   0
a   8   0   0
o   0   0   0
o   0   0   0
o   0   0   0
t   5   0   0
o   1   0   0
o   6   a   0
o   6   0   0
d   0   0   0

глядя на лист excel, я действительно получаю частичную распечатку. Все, что находится в столбце с именем и рядом, являются пустыми, но события, составляющие и отправляют по электронной почте всю печать.

edit: попытка чтения csv в качестве utf8 завершается с ошибкой, но чтение его выполняется как latin1. Есть ли способ указать кодировку to_excel? Или декодировать и кодировать мою фреймворк в utf8?

Ответы

Ответ 1

Удалось решить эту проблему.

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

def changeencode(data, cols):
    for col in cols:
        data[col] = data[col].str.decode('iso-8859-1').str.encode('utf-8')
    return data   

Ответ 2

В моем случае проблема заключалась в том, что я сначала читал CSV файл с неправильной кодировкой (ASCII вместо cp1252). Поэтому, когда pandas попытался записать его в файл Excel, он обнаружил некоторые символы, которые он не мог декодировать.

Я решил это, указав правильную кодировку при чтении CSV файла.

data = pd.read_csv(fname, encoding='cp1252')

Ответ 3

На самом деле существует способ принудительного кодирования utf8 путем передачи параметра в ExcelWriter:

 ew = pandas.ExcelWriter('test.xlsx',options={'encoding':'utf-8'})
 sampleList = ['Miño', '1', '2', 'señora']
 dataframe = pandas.DataFrame(sampleList)
 dataframe.to_excel(ew)
 ew.save()

Ответ 4

Самое простое - загрузить ваш фреймворк в utf-8. Тогда ExcelWriter не спасет его.

data = pd.read_csv(path,encoding='utf-8')

Ответ 5

не знаю, когда он будет выпущен, но вы можете попробовать с моим репозиторием github:

https://github.com/jtornero/pandas

Вы можете клонировать его и строить pandas из источника; проблема почти решена и работает как

sampleList = ['Miño', '1', '2', 'señora']
dataframe = pandas.DataFrame(sampleList)
ew = pandas.ExcelWriter('./test.xls', encoding='utf-8')
dataframe.to_excel(ew)
ew.save()

Приветствия

Хорхе Торнеро

Ответ 6

Подобно тому, что было сказано @Zenadix, чтение csvs в формате UTF-8 позволило ExcelWriter писать без ошибок.

df = pd.read_csv('path', encoding='utf-8')

...

with pd.ExcelWriter('new_path') as writer:
    df.to_excel(writer, sheet_name='Foo')


Ответ 7

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

data = pd.read_csv('Filename.csv', encoding='cp1252')

Большое спасибо!