pandas:保存为Excel编码问题

我有一个类似的问题, 这里提到的一个,但没有任何build议的方法为我工作。

我有一个中等大小的utf-8 .csv文件,其中包含很多非ascii字符。 我是从一个列中的特定值拆分文件,然后我想将每个获得的数据框保存为一个.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') 

尝试使用非ascii字符编码列

 df['col'] = df['col'].apply(lambda x: unicode(x)) 

然后将文件保存为xlsx格式,编码为“utf8”

据说这是我当时使用的pandas版本中的一个错误。 现在,在pandas 。 0.19.2,下面的代码保存了csv的问题没有任何问题(和正确的编码)。
注意: openpyxl模块必须安装在您的系统上。

 import pandas as pd df = pd.read_csv('Desktop/test.csv') df.to_excel('Desktop/test.xlsx', encoding='utf8') 

如果从pandas保存csv文件,然后使用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