Pandas: сохранить в excel проблема кодирования

у меня есть аналогичная проблема с упомянутой здесь но ни один из предложенных методов работает для меня.

у меня средний размер utf-8 .CSV-файл с большим количеством символов, отличных от ASCII. Я разделяю файл на определенное значение из одного из столбцов, а затем я хотел бы сохранить каждый из полученных кадров данных как an .xlsx файл с сохраненными символами.

это не работает, как я получаю сообщение об ошибке:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 7: ordinal not in range(128)

здесь что я пробовал:

  1. используя xlsxwriter двигатель в явном виде. Похоже, это ничего не меняет.
  2. определение функции (ниже) для изменения кодировки и выбрасывания плохих символов. Это тоже ничего не меняет.

    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   
    
  3. изменение вручную всех оскорбительных символов на некоторые другие. По-прежнему никакого эффекта (цитируемая ошибка была получена после этого изменения).

  4. кодирование файла как 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