用pyExcelerate编写特殊的字符?如何保持utf-8编码?

时间:2016-02-16 13:58:01

标签: python pandas utf-8 python-2.x pyexcelerate

我想将数据从Pandas数据帧写入Excel文件。我使用pyExcelerate而不是内置的to_excel()方法来获得更好的性能。

当Pandas处理utf-8编码的特殊字符时,转换为python列表时编码似乎丢失了。 我通读了https://docs.python.org/2/howto/unicode.html,但是我无法找到如何保留编码。或者有没有办法在写作时恢复编码?

# -*- coding: utf-8 -*-
import pandas as pd
from pyexcelerate import Workbook 

df = pd.DataFrame({'val': ['ä']})
print df
#   val
# 0   ä  <- non ascii character a with dots

value = df.values.tolist()
print value
# [['\xc3\xa4']]

wb = Workbook()
ws = wb.new_sheet("sheet name", data=value)
wb.save("output.xlsx")

# UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 31: ordinal not in range(128)

1 个答案:

答案 0 :(得分:1)

简单,使用Unicode文字为您的Dataframe提供Unicode:

df = pd.DataFrame({u'val': [u'ä']})

记下u前缀

确保您的文件使用UTF-8进行编码(以匹配# -*- coding: utf-8 -*-标头)(看起来UTF-8编码为0xc3ä的第一个字节)

错误是由Python不知道字节字符串的编码引起的,当字符串稍后编组到Unicode对象中时。