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')
Большое спасибо!