如何使用pandas to_exel在.xlsx中以'utf-8'格式保存字符串(to_csv能够将其保存为.csv)

时间:2016-10-19 07:29:47

标签: excel python-2.7 pandas encoding utf-8

因为我能够使用'utf-8'编码使用to_csv保存字符串,所以我希望能够使用to_excel来做同样的事情。这对我来说不是编码问题。我之前看过的帖子都没有,讨论过这个问题。

我在Windows 7(Anaconda)和pandas 0.18.1

上使用python 2.7.12

我有两个问题涉及将包含特殊字符(编码为'utf-8')的熊猫数据帧保存为.csv或.xlsx文件。

例如:

import pandas as pd

# Create a Pandas dataframe from the data.
df = pd.DataFrame({'Data': ['1', 'as', '?%','ä']})

我可以将数据框保存为.cvs文件而不会出现任何问题:

df.to_csv('test_csv.csv',sep=',', encoding='utf-8')

它有效。导入数据时,我需要在Excel中选择“utf-8”,一切都很好。

现在,如果我尝试将相同的数据帧保存为.xlsx,那么它就不起作用了。

我有以下代码:

 # Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('pandas_simple.xlsx', engine='xlsxwriter',   options={'encoding':'utf-8'})

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1',encoding='utf-8')
writer.save()

我收到以下错误消息:

  

UnicodeDecodeError:'ascii'编解码器无法将字节0xc3解码到位   7:序数不在范围内(128)

我并非100%确定使用正确的选项来设置编码:

options={'encoding':'utf-8'}

encoding='utf-8'

因为我不清楚如何从文档中继续。

知道如何运作吗?

与df.to_csv相关的奖金问题。有没有办法使用一些特殊字符作为分隔符?有些原因,我从R迁移到python的代码是使用sep ='¤'。试图以所有可能的方式编码这个特殊字符,但总是失败。有可能吗?

非常感谢

干杯

法比安

1 个答案:

答案 0 :(得分:0)

如果您使用xlsxwriter作为Excel编写引擎,则忽略encoding='utf-8',因为XlsxWriter模块不使用它。

XlsxWriter要求字符串数据编码为utf8。之后它会自动处理字符串。

因此,您需要确保您正在编写的字符串数据通过Pandas编码为utf8:在您阅读时或在数据在数据框中之后。