20

我正在尝试在 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?

4

6 回答 6

23

设法解决了这个问题。

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

def changeencode(data, cols):
    for col in cols:
        data[col] = data[col].str.decode('iso-8859-1').str.encode('utf-8')
    return data   
于 2013-09-06T15:35:33.153 回答
14

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

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

data = pd.read_csv(fname, encoding='cp1252')
于 2014-09-25T15:25:12.770 回答
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()
于 2014-04-24T23:10:53.723 回答
2

最简单的事情是在 utf-8 中加载你的数据框。然后它 ExcelWriter 将保存它没有问题。

data = pd.read_csv(path,encoding='utf-8')
于 2014-11-17T18:52:11.747 回答
1

不知道什么时候发布,但是你可以试试我的 github 仓库:

https://github.com/jtornero/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()

干杯

豪尔赫·托内罗

于 2013-10-08T20:50:41.753 回答
0

与@Zenadix 所说的类似,以 UTF-8 格式读取 csvs 允许 ExcelWriter 写入而不会出现错误。

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

...

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


于 2019-01-31T20:06:00.933 回答