【问题标题】:Writing special chäracters with pyExcelerate? How to keep utf-8 encoding?用 pyExcelerate 编写特殊字符?如何保持 utf-8 编码?
【发布时间】:2016-02-16 13:58:01
【问题描述】:

我想将 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)

【问题讨论】:

  • 您的文件顶部是否偶然有# -*- coding: utf-8 -*-?来自here
  • FWIW,'\xc3\xa4''ä'的UTF-8编码;如果我们将其解码为 Unicode(例如'\xc3\xa4'.decode('utf8')),我们会得到u'\xe4'。您可能会发现这篇文章很有帮助:Pragmatic Unicode,由 SO 资深人士 Ned Batchelder 撰写。
  • # -*- coding: utf-8 -*- 在代码中(编辑了我的示例)。如果它不存在,我已经在创建 DataFrame 时遇到错误。

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


【解决方案1】:

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

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

注意 u 前缀

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

该错误是由于Python不知道字节字符串的编码,稍后将字符串编组为Unicode对象。

【讨论】:

  • 添加u 前缀解决了这个问题。要在现有列上“添加u”,我使用了df['val'] = df['val'].str.decode('utf8')
猜你喜欢
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 2014-02-14
  • 2011-02-21
  • 2010-11-25
  • 1970-01-01
  • 2015-05-19
相关资源
最近更新 更多