我想将数据从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)
答案 0 :(得分:1)
简单,使用Unicode文字为您的Dataframe提供Unicode:
df = pd.DataFrame({u'val': [u'ä']})
记下u
前缀
确保您的文件使用UTF-8进行编码(以匹配# -*- coding: utf-8 -*-
标头)(看起来UTF-8编码为0xc3
是ä
的第一个字节)
错误是由Python不知道字节字符串的编码引起的,当字符串稍后编组到Unicode对象中时。