Python熊猫到excel';utf8';编解码器可以';t解码字节
我正试图用Python做一些数据工作,但在写出结果时遇到了困难。 我以CSV文件的形式读取数据,并将每个脚本导出为自己的CSV文件,效果良好。最近,尽管我尝试将所有内容导出到Excel文件中,其中包含工作表和一些工作表,但还是出现了一个错误 “'utf8'编解码器无法解码位置1中的字节0xe9:无效的连续字节” 我甚至不知道如何开始查找任何可能导致导出到Excel时出现问题的字符。不确定为什么它会导出到CSV,但很好:( 相关线路Python熊猫到excel';utf8';编解码器可以';t解码字节,python,excel,utf-8,pandas,Python,Excel,Utf 8,Pandas,我正试图用Python做一些数据工作,但在写出结果时遇到了困难。 我以CSV文件的形式读取数据,并将每个脚本导出为自己的CSV文件,效果良好。最近,尽管我尝试将所有内容导出到Excel文件中,其中包含工作表和一些工作表,但还是出现了一个错误 “'utf8'编解码器无法解码位置1中的字节0xe9:无效的连续字节” 我甚至不知道如何开始查找任何可能导致导出到Excel时出现问题的字符。不确定为什么它会导出到CSV,但很好:( 相关线路 from pandas import ExcelWriter d
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格式读取csv有效。是否有方法指定“到excel”编码?或将我的数据帧解码并编码为utf8?已设法解决此问题
我做了一个函数,它遍历了我的有字符串的列,并设法将它们解码/编码为utf8,现在它可以工作了
def changeencode(data, cols):
for col in cols:
data[col] = data[col].str.decode('iso-8859-1').str.encode('utf-8')
return data
不知道何时发布,但您可以尝试使用我的github存储库: 你可以克隆它,从源头上建造熊猫;这个问题几乎解决了,它的工作原理就像
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实际上,有一种方法可以通过向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()
在我的例子中,问题是我最初读取的CSV文件编码错误(
ASCII
),而不是cp1252
)。因此,当pandas试图将其写入Excel文件时,它发现一些无法解码的字符
我通过在读取CSV文件时指定正确的编码来解决这个问题
data = pd.read_csv(fname, encoding='cp1252')
最简单的方法是用utf-8加载数据帧,然后它就可以保存了
data = pd.read_csv(path,encoding='utf-8')
与@Zenadix所说的类似,以UTF-8的形式读取CSV允许ExcelWriter无误地编写
df = pd.read_csv('path', encoding='utf-8')
...
with pd.ExcelWriter('new_path') as writer:
df.to_excel(writer, sheet_name='Foo')
你能发布一些可能会冒犯你的unicode字符吗?生成随机的希伯来文字符,然后编写它们对我来说很好。我不知道如何找到它认为冒犯的字符。CSV不同的一个原因是Excel导出不是由
pandas
完成的,而是由第三方库完成的(xlwt
和/或openpyxl
)。相关:过去我在将CSV文件读入utf8编码但未指定编码的熊猫中时遇到问题。例如,尝试pd.read\u CSV(输入,encoding='utf-8')或者你有“latin-1”输入数据-似乎在谷歌搜索中弹出了你的错误。在中。to_csv
也有一个可选的编码
参数。谢谢!这个函数非常有用。这将有助于熊猫内置这种类型的功能,而不是仅仅抛出一个不太深刻的见解完全错误(或至少标识遇到问题的第一行和第一列)。