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

时间:2013-09-05 20:31:06

标签: 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()

违规数据框的打印头

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

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

编辑:尝试以utf8读取csv失败,但以latin1的形式读取它有效。有没有办法指定to_excel编码?或者将我的数据帧解码并编码为utf8?

6 个答案:

答案 0 :(得分:20)

管理解决此问题。

我创建了一个函数,遍历我的列,这些列具有字符串并设法将它们解码/编码为utf8,现在它可以正常工作。

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

答案 1 :(得分:13)

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

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

cp1252

答案 2 :(得分: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()

答案 3 :(得分:2)

最简单的方法是在utf-8中加载数据帧。然后它ExcelWriter将保存它没有问题。

data = pd.read_csv(path,encoding='utf-8')

答案 4 :(得分:1)

不知道什么时候会发布,但你可以尝试使用我的github存储库:

https://github.com/jtornero/pandas

您可以克隆它并从源代码构建pandas;问题几乎已经解决,就像

一样
sampleList = ['Miño', '1', '2', 'señora']
dataframe = pandas.DataFrame(sampleList)
ew = pandas.ExcelWriter('./test.xls', encoding='utf-8')
dataframe.to_excel(ew)
ew.save()

干杯

Jorge Tornero

答案 5 :(得分:0)

要什么被@Zenadix所述,读取为UTF-8允许ExcelWriter到写入没有错误的CSV中相似

df = pd.read_csv('path', encoding='utf-8')

...

with pd.ExcelWriter('new_path') as writer:
    df.to_excel(writer, sheet_name='Foo')