我遇到的问题与here提到的类似,但建议的方法都不适用于我。
我有一个中等大小的utf-8
.csv文件,其中包含许多非ascii字符。
我正在从其中一个列中按特定值拆分文件,然后我想将每个获取的数据帧保存为保留字符的.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中操作文件)也不会有任何帮助。< / p>
我认为问题出在文件本身(因为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')
答案 0 :(得分:4)
据说这是我当时使用的pandas
版本中的一个错误。
现在,在pandas
ver。 0.19.2,下面的代码可以毫无困难地保存csv(并且编码正确)
注意:必须在您的系统上安装openpyxl
模块。
import pandas as pd
df = pd.read_csv('Desktop/test.csv')
df.to_excel('Desktop/test.xlsx', encoding='utf8')
答案 1 :(得分:2)
尝试将非ascii字符的列编码为
df['col'] = df['col'].apply(lambda x: unicode(x))
然后使用编码'utf8'
将文件保存为xlsx格式答案 2 :(得分:0)
如果您从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