Pandas UTF-8 写入 Excel 仅在 Windows 上发布
Pandas UTF-8 Write to Excel Issue on Windows Only
所以我遇到 Python 2.7 和 Pandas 中的 ExcelWriter 的问题(我相信由 OpenPyXl 提供)。
基本上,在 Linux 或 Mac OS X 系统上,我的代码没有问题,但在 Windows 上,我尝试了多个选项。将数据加载(使用 'utf-8' 编码)到数组后,进行各种计算,数据写入 CSV 非常好,但不适用于 ExcelWriter。
这是一个可以说明我的问题的测试示例。首先,我制作数据框(已加载,但我已验证我的实际代码在打印步骤之前具有正确编码的数据)。
import pandas as pd
df = pd.DataFrame(index=range(2), columns=range(2))
df.loc[1,1] = 'α'
CSV 保存尝试:
df.to_csv('test.csv')
Excel 保存尝试 1:
ew = pd.ExcelWriter('test.xlsx')
df.to_excel(ew, 'test')
ew.save()
Excel 保存尝试 2:
ew = pd.ExcelWriter('test.xlsx', options={'encoding':'utf-8'})
df.to_excel(ew, 'test')
ew.save()
在这两种情况下,所有 3 次保存尝试都适用于 Ubuntu 安装和 Mac OS X 操作系统 (Yosemite),但只有 Excel 写作不适用于 Windows 7 安装 Python 2.7。我已经尝试使用 OpenPyXl 版本 1.7.0 和 1.8.6,Pandas 版本 0.15.0 和 0.15.2 on Ubuntu(Max OS X 不太重要)和 OpenPyXl Windows.
上的版本 1.7.0 和 Pandas 版本 0.14.1
它似乎是独立于 OpenPyXl 且独立于 Pandas,所以我忽略了一些明显的东西吗?这是一个小故障吗?它在我朋友的 Windows 7 安装中也有类似的问题。
两个 Windows 安装都通过 SciPy Win32 超级包为 Python 2.7 安装了 SciPy 依赖项。
我用sys reload方法解决了。在顶部附加此代码有效:
import sys
reload(sys)
sys.setdefaultencoding('UTF8')
这里有更深入的解释:
手动设置数据帧的编码对 IO 没有任何作用,因此设置默认编码是合乎逻辑的下一步。它奏效了。
所以我遇到 Python 2.7 和 Pandas 中的 ExcelWriter 的问题(我相信由 OpenPyXl 提供)。
基本上,在 Linux 或 Mac OS X 系统上,我的代码没有问题,但在 Windows 上,我尝试了多个选项。将数据加载(使用 'utf-8' 编码)到数组后,进行各种计算,数据写入 CSV 非常好,但不适用于 ExcelWriter。
这是一个可以说明我的问题的测试示例。首先,我制作数据框(已加载,但我已验证我的实际代码在打印步骤之前具有正确编码的数据)。
import pandas as pd
df = pd.DataFrame(index=range(2), columns=range(2))
df.loc[1,1] = 'α'
CSV 保存尝试:
df.to_csv('test.csv')
Excel 保存尝试 1:
ew = pd.ExcelWriter('test.xlsx')
df.to_excel(ew, 'test')
ew.save()
Excel 保存尝试 2:
ew = pd.ExcelWriter('test.xlsx', options={'encoding':'utf-8'})
df.to_excel(ew, 'test')
ew.save()
在这两种情况下,所有 3 次保存尝试都适用于 Ubuntu 安装和 Mac OS X 操作系统 (Yosemite),但只有 Excel 写作不适用于 Windows 7 安装 Python 2.7。我已经尝试使用 OpenPyXl 版本 1.7.0 和 1.8.6,Pandas 版本 0.15.0 和 0.15.2 on Ubuntu(Max OS X 不太重要)和 OpenPyXl Windows.
上的版本 1.7.0 和 Pandas 版本 0.14.1它似乎是独立于 OpenPyXl 且独立于 Pandas,所以我忽略了一些明显的东西吗?这是一个小故障吗?它在我朋友的 Windows 7 安装中也有类似的问题。
两个 Windows 安装都通过 SciPy Win32 超级包为 Python 2.7 安装了 SciPy 依赖项。
我用sys reload方法解决了。在顶部附加此代码有效:
import sys
reload(sys)
sys.setdefaultencoding('UTF8')
这里有更深入的解释: 手动设置数据帧的编码对 IO 没有任何作用,因此设置默认编码是合乎逻辑的下一步。它奏效了。