Pandas: сохранить в excel проблема кодирования
у меня есть аналогичная проблема с упомянутой здесь но ни один из предложенных методов работает для меня.
у меня средний размер utf-8
.CSV-файл с большим количеством символов, отличных от ASCII.
Я разделяю файл на определенное значение из одного из столбцов, а затем я хотел бы сохранить каждый из полученных кадров данных как an .xlsx файл с сохраненными символами.
это не работает, как я получаю сообщение об ошибке:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 7: ordinal not in range(128)
здесь что я пробовал:
- используя
xlsxwriter
двигатель в явном виде. Похоже, это ничего не меняет. -
определение функции (ниже) для изменения кодировки и выбрасывания плохих символов. Это тоже ничего не меняет.
def changeencode(data): cols = data.columns for col in cols: if data[col].dtype == 'O': data[col] = data[col].str.decode('utf-8').str.encode('ascii', 'ignore') return data
изменение вручную всех оскорбительных символов на некоторые другие. По-прежнему никакого эффекта (цитируемая ошибка была получена после этого изменения).
кодирование файла как
utf-16
(который, Я считаю, что это правильная кодировка, так как я хочу иметь возможность манипулировать файлом из excel впоследствии) тоже не помогает.
Я считаю, что проблема заключается в самом файле (из-за 2 и 3), но я понятия не имею, как обойти его. Буду признателен за любую помощь. Начало файла вставляется ниже.
"Submitted","your-name","youremail","phone","miasto","cityCF","innemiasto","languagesCF","morelanguages","wiek","partnerCF","messageCF","acceptance-795","Submitted Login","Submitted From","2015-12-25 14:07:58 +00:00","Zózia kryś","test@tes.pl","4444444","Wrocław","","testujemy polskie znaki","Polski","testujemy polskie znaki","44","test","test","1","Justyna","99.111.155.132",
редактировать
некоторый код (одна из версий, без разделения часть):
import pandas as pd
import string
import xlsxwriter
df = pd.read_csv('path-to-file.csv')
with pd.ExcelWriter ('test.xlsx') as writer:
df.to_excel(writer, sheet_name = 'sheet1',engine='xlsxwriter')
3 ответов
якобы это была ошибка в версии pandas
который я использовал тогда.
Прямо сейчас, в pandas
ver. 0.19.2, код ниже сохраняет csv из вопроса без каких-либо проблем (и с правильной кодировкой).
NB:openpyxl
модуль должен быть установлен на вашей системе.
import pandas as pd
df = pd.read_csv('Desktop/test.csv')
df.to_excel('Desktop/test.xlsx', encoding='utf8')
попробуйте кодировать столбцы не ascii-символами как
df['col'] = df['col'].apply(lambda x: unicode(x))
а затем сохраните файл в формате xlsx с кодировкой 'utf8'
Что делать, если вы сохраните csv-файлы из pandas, а затем используете win32com для преобразования в Excel. Это будет выглядеть примерно так...
import win32com.client
excel = win32com.client.Dispatch("Excel.Application")
excel.Visible = 0
for x in range(10):
f = path + str(x)
# not showing the pandas dataframe creation
df.to_csv(f+'.csv')
wb = excel.Workbooks.Open(f+'.csv')
wb.SaveAs(f+'.xlsx', 51) #xlOpenXMLWorkbook=51