Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python熊猫到excel';utf8';编解码器可以';t解码字节_Python_Excel_Utf 8_Pandas - Fatal编程技术网

Python熊猫到excel';utf8';编解码器可以';t解码字节

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

我正试图用Python做一些数据工作,但在写出结果时遇到了困难。 我以CSV文件的形式读取数据,并将每个脚本导出为自己的CSV文件,效果良好。最近,尽管我尝试将所有内容导出到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格式读取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
也有一个可选的
编码
参数。谢谢!这个函数非常有用。这将有助于熊猫内置这种类型的功能,而不是仅仅抛出一个不太深刻的见解完全错误(或至少标识遇到问题的第一行和第一列)。