如何使用pandas to_exel在.xlsx中以'utf-8'格式保存string(to_csv可以将其保存为.csv)

因为我可以使用'utf-8'编码使用to_csv保存string,所以我希望能够使用to_excel做同样的事情。 在编码方面,这不是我的问题。 我之前看到的线索都没有讨论这个问题。

我在Windows 7(Anaconda)和pandas0.18.1上使用python 2.7.12

我有两个与保存包含特殊字符(编码为“utf-8”)的pandasdataframe相关的.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中select'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'编解码器无法解码位置7中的字节0xc3:序号不在范围内(128)

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

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

 encoding='utf-8' 

因为我不清楚如何从文档中进行操作。

任何想法如何有这个工作?

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

非常感谢

干杯

法比恩

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

XlsxWriter要求string数据编码为utf8 。 之后,它自动处理string。

所以你需要确保你正在编写的string数据通过Pandas编码为utf8 :读取它或者在dataframe之后。