Python pandas to_excel'utf8'编解码器无法解码字节

Wiz*_*iel 18 python excel utf-8 pandas

我正在尝试在Python pandas中做一些数据工作,并且无法写出我的结果.我将我的数据作为CSV文件读取并导出每个脚本,因为它自己的CSV文件工作正常.最近虽然我已经尝试将所有内容导出到带有工作表的1个Excel文件中,但是一些工作表给我一个错误

"'utf8'编解码器无法解码位置1中的字节0xe9:无效的连续字节"

我不知道如何开始找到任何可能导致导出到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()
Run Code Online (Sandbox Code Playgroud)

打印数据帧的负责人

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
Run Code Online (Sandbox Code Playgroud)

看着excel表我确实得到了部分打印出来.名字列及其后的任何内容都是空白的,但事件,成分和电子邮件都是打印的.

编辑:尝试读取csv in utf8失败,但读取它作为latin1工作.有没有办法指定to_excel编码?或者将我的数据帧解码并编码为utf8?

Wiz*_*iel 21

管理解决这个问题.

我创建了一个功能,通过我的列有字符串,并设法解码/编码为utf8,现在它的工作原理.

def changeencode(data, cols):
    for col in cols:
        data[col] = data[col].str.decode('iso-8859-1').str.encode('utf-8')
    return data   
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这个功能非常有用.Pandas内置这种类型的功能会有所帮助,而不仅仅是抛出一个不那么富有洞察力的错误(或至少识别出遇到问题的第一行和第一行). (8认同)

Zen*_*dix 13

在我的情况下,问题是我最初使用错误的编码(而不是)读取 CSV文件.因此,当pandas尝试将其写入Excel文件时,它会发现一些无法解码的字符.ASCIIcp1252

我通过在读取CSV文件时指定正确的编码来解决它.

data = pd.read_csv(fname, encoding='cp1252')
Run Code Online (Sandbox Code Playgroud)


小智 5

实际上,有一种方法可以通过将参数传递给ExcelWriter来强制执行utf8编码:

 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()
Run Code Online (Sandbox Code Playgroud)