Python 3.5 使用openpyxl写numpy
Python 3.5 write numpy using openpyxl
我一直在研究 Hilpisch 的 "Python for Finance",直到我读到有关写信给 Excel 的章节时才遇到很多麻烦。我是 运行 Python 3.5 并使用 OpenPyxl 模块
import openpyxl as oxl
import numpy as np
wb = oxl.Workbook()
ws = wb.create_sheet(index = 0, title = 'oxl_sheet')
data = np.arange(1, 65).reshape((8, 8))
for c in range(1, data.shape[0]):
for r in range(1, data.shape[1]):
ws.cell(row=r, column=c, value=data[c, r])
这个returns:ValueError: Cannot convert 10 to Excel
使用 numpy 有问题吗?比如下面的代码returns类似的错误。
ws.cell(row=1, column=1, value=data[0,0])
但是用整数或浮点数替换 data[0, 0]
没有问题。
似乎应该有一个简单的解决方法。
openpyxl 仅适用于 "known" 类型(int、字符串等),它知道如何将其转换为 Excel 数据类型。不幸的是 data[0, 0]
不是已知类型:
➜ python
Python 2.7.10 (default, Oct 14 2015, 16:09:02)
[GCC 5.2.1 20151010] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> data = np.arange(1, 65).reshape((8, 8))
>>> type(data[0, 1])
<type 'numpy.int64'>
您必须将 numpy.int64
转换为 int
类型:
>>> for c in range(1, data.shape[0]):
... for r in range(1, data.shape[1]):
... ws.cell(row = r, column = c).value = data[c, r].astype(int)
已将对 numpy 类型的支持添加到 openpyxl 2.4,您可以使用 pip install -U --pre openpyxl
.
安装它
我一直在研究 Hilpisch 的 "Python for Finance",直到我读到有关写信给 Excel 的章节时才遇到很多麻烦。我是 运行 Python 3.5 并使用 OpenPyxl 模块
import openpyxl as oxl
import numpy as np
wb = oxl.Workbook()
ws = wb.create_sheet(index = 0, title = 'oxl_sheet')
data = np.arange(1, 65).reshape((8, 8))
for c in range(1, data.shape[0]):
for r in range(1, data.shape[1]):
ws.cell(row=r, column=c, value=data[c, r])
这个returns:ValueError: Cannot convert 10 to Excel
使用 numpy 有问题吗?比如下面的代码returns类似的错误。
ws.cell(row=1, column=1, value=data[0,0])
但是用整数或浮点数替换 data[0, 0]
没有问题。
似乎应该有一个简单的解决方法。
openpyxl 仅适用于 "known" 类型(int、字符串等),它知道如何将其转换为 Excel 数据类型。不幸的是 data[0, 0]
不是已知类型:
➜ python
Python 2.7.10 (default, Oct 14 2015, 16:09:02)
[GCC 5.2.1 20151010] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> data = np.arange(1, 65).reshape((8, 8))
>>> type(data[0, 1])
<type 'numpy.int64'>
您必须将 numpy.int64
转换为 int
类型:
>>> for c in range(1, data.shape[0]):
... for r in range(1, data.shape[1]):
... ws.cell(row = r, column = c).value = data[c, r].astype(int)
已将对 numpy 类型的支持添加到 openpyxl 2.4,您可以使用 pip install -U --pre openpyxl
.