如何使用 pandas to_exel 将字符串保存为 .xlsx 中的“utf-8”格式(to_csv 能够将其保存为 .csv)
Posted
技术标签:
【中文标题】如何使用 pandas to_exel 将字符串保存为 .xlsx 中的“utf-8”格式(to_csv 能够将其保存为 .csv)【英文标题】:how to save string in 'utf-8' format in a .xlsx using pandas to_exel (to_csv is able to save it as .csv) 【发布时间】:2017-02-28 17:02:01 【问题描述】:因为我能够使用 to_csv 使用 'utf-8' 编码来保存字符串,所以我希望能够使用 to_excel 来做同样的事情。这对我来说不是编码问题。之前看到的帖子都没有,讨论这个问题。
我在 Windows 7(Anaconda) 和 pandas 0.18.1 上使用 python 2.7.12
我有 2 个关于将包含特殊字符(编码为“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='¤'。试图以所有可能的方式编码这个特殊字符,但总是失败。有可能吗?
非常感谢
干杯
法比恩
【问题讨论】:
Pandas: save to excel encoding issue的可能重复 favorite 这个问题在这里可能已经有了答案:Pandas: save to excel encoding issue 2 answers 因为我可以使用'utf-8'编码使用to_csv保存字符串,我期待这样做能够使用 to_excel 做同样的事情。这对我来说不是编码问题。我之前看到的帖子都没有,讨论这个问题。如果我错了,请纠正我。 【参考方案1】:如果您使用 xlsxwriter
作为 Excel 写入引擎,则 encoding='utf-8'
将被忽略,因为 XlsxWriter 模块不使用它。
XlsxWriter 要求字符串数据编码为utf8
。之后它会自动处理字符串。
因此,您需要确保您正在写入的字符串数据通过 Pandas 编码为utf8
:无论是在您读取它时还是在数据进入数据帧之后。
【讨论】:
谢谢@jmcnamara,这解释了我的问题。通过修复数据框中的编码来解决我的问题。以上是关于如何使用 pandas to_exel 将字符串保存为 .xlsx 中的“utf-8”格式(to_csv 能够将其保存为 .csv)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用空值将字符串转换为日期时间 - python,pandas?