NumPy 是 Python 中最流行的库之一。它支持数据科学、机器学习和数值分析。许多开发者使用 NumPy 数组 (ndarray) 来快速处理大型数据集。

在我们的 previous blog post 中,我们解释了如何将 Excel 文件转换为 NumPy 数组。当您需要将外部数据导入 Python 进行分析时,这个工作流程是很有用的。但是如果您想要做相反的事情呢?很多时候,您需要将来自 NumPy 的 Python 结果导出到 Excel 进行报告和共享。Excel 在企业、学校和组织中被广泛使用,使其成为理想的协作格式。

在本指南中,我们将逐步向您展示如何使用 Python 和 Aspose.Cells for Python via .NET 将 NumPy 转换为 Excel。

为什么将 NumPy 转换为 Excel?

NumPy 在 Python 中进行计算和分析是完美的。但我们常常需要与他人分享结果。大多数商业用户更喜欢 Excel,因为它熟悉且易于使用。

以下是您可能需要将 NumPy 导出到 Excel 的一些常见原因:

  • 数据报告:将处理后的数据转换为管理者或客户的 Excel 文件。
  • 协作:与不使用 Python 的队友分享结果。
  • 商业分析:将 NumPy 结果与现有的 Excel 报告和仪表板结合。
  • 可视化:使用 Excel 图表和数据透视表使数据更具意义。

Excel 是一种通用格式。它弥合了 Python 开发人员和非技术用户之间的差距。通过将 NumPy 数组导出到 Excel,您使您的数据可访问、可用且易于理解。

Python NumPy Excel 库

Aspose.Cells for Python 是一个强大的电子表格库。它允许您创建、编辑和处理 Excel 文件,而无需安装 Microsoft Excel。它是 最佳 Excel 库 for Python,专为需要对 Excel 文档进行全面控制的开发人员设计。您可以:

  • 加载和保存不同格式的 Excel 文件。
  • 处理工作表、表格、范围和图表。
  • 从 Python 对象导入和导出数据,包括 NumPy 数组。
  • 处理大型数据集,同时确保高速度和高准确性。

最佳的部分是 Aspose.Cells 可以独立工作。您不需要 Excel 或任何外部软件。它在您的 Python 应用程序中顺利运行,并与科学工作流程很好地集成。这使它成为将 NumPy 数据转换为 Excel 文件的可靠解决方案。

将 NumPy 转换为 Excel 在 Python 中

将 NumPy 数组转换为 Excel 使用 Aspose.Cells 非常简单。请按照以下快速步骤进行操作:

步骤 1:通过 .NET 安装 Aspose.Cells for Python

使用 pip 安装该软件包:

pip install aspose-cells-python

步骤 2:导入所需库

在你的 Python 脚本中,导入 NumPy 和 Aspose.Cells:

import numpy as np
import aspose.cells as cells

步骤 3:创建一个示例 NumPy 数组

为了测试,创建一个简单的 2D 数组:

data = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])

步骤 4:定义一个自定义函数 – insertnumpyarray

NumPy 值通常以 numpy.int64numpy.float32numpy.bool 等类型出现。这些在写入 Excel 单元格之前需要转换为原生 Python 类型。

下面的辅助函数执行此转换,并从给定的行和列直接将数组插入到工作表中:

# 自定义函数将 NumPy 数组插入工作表
def insert_numpy_array(sheet, ndarray, start_row=0, start_col=0):
    rows, cols = ndarray.shape
   for r in range(rows):
       for c in range(cols):
            value = ndarray[r, c]
            # 将 NumPy 类型转换为原生 Python 类型
            if isinstance(value, (np.integer,)):
                value = int(value)
            elif isinstance(value, (np.floating,)):
                value = float(value)
            elif isinstance(value, (np.bool_,)):
                value = bool(value)
            elif isinstance(value, (np.str_, np.str_)):
                value = str(value)
            sheet.cells.get(start_row + r, start_col + c).put_value(value)
            

在接下来的部分中,我们将演示如何将 NumPy 数据插入 Workbook、Worksheet、ListObject、Range 和 Named Range。接下来的部分中的代码示例使用了在第 4 步:自定义函数部分中定义的辅助函数。

如何将 NumPy ndarray 转换为 Excel 工作簿

您可以仅用几行代码从 NumPy 数组创建一个完整的 Excel 工作簿。该方法非常适合当您想要将数据分析结果、机器学习输出或表格数据集导出到可以共享或进一步处理的专业 Excel 文件中时。

请按照以下步骤将 NumPy ndarray 转换为 Excel 工作簿:

  1. 创建一个包含您的数据的 NumPy 2D 数组。
  2. 使用 Workbook 类初始化一个新的空工作簿。
  3. 使用 worksheets.add() 方法向工作簿添加新工作表。
  4. 通过它的索引访问新工作表。
  5. 遍历 NumPy 数组并将值插入工作表单元格中。
  6. 将工作簿保存为 Excel 文件。

以下代码示例展示了如何将一个 NumPy ndarray 转换为 Excel 工作簿。

# 创建一个 NumPy 数组
data = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])

# 将 NumPy 数组转换为 Excel 工作簿
workbook = cells.Workbook()

# 添加一个新工作表
new_sheet_index = workbook.worksheets.add()
worksheet = workbook.worksheets.get(new_sheet_index)

# 将数组插入到从单元格 A1 开始的新工作表中
insert_numpy_array(worksheet, data)

# 将工作簿另存为 Excel 文件
workbook.save("numpy_to_workbook.xlsx")
如何将NumPy转换为Excel工作簿

如何将 NumPy 转换为 Excel 工作簿

将 NumPy ndarray 插入工作表

有时您已经有一个工作簿,您只想将 NumPy 数据插入一个工作表中。

请按照以下步骤将 NumPy ndarray 转换为工作表:

  1. 创建一个包含您的数据的 NumPy 2D 数组。
  2. 加载现有的 Excel 文件,使用 Workbook 类。
  3. 选择您想放置数据的工作表。
  4. 遍历 NumPy 数组,并将值插入到工作表单元格中。
  5. 将工作簿保存为 Excel 文件。

以下代码示例演示了如何将 NumPy ndarray 插入到 Excel 工作簿的特定工作表中:

# 创建一个 NumPy 数组
data = np.array([['City', 'Region', 'Store'], ['Chicago', 'Central', 3055], ['New York', 'East', 3036],
                 ['Detroit', 'Central', 3074]])

# 将 NumPy 数组转换为 Excel 工作簿
workbook = cells.Workbook("numpy_to_workbook.xlsx")

# 访问第一个工作表
sheet = workbook.worksheets.get(0)

# 将 NumPy 数组插入工作表,从 A1 开始
insert_numpy_array(sheet, data, 0, 0)

# 将工作簿保存为 Excel 文件
workbook.save("numpy_to_worksheet.xlsx")
如何将 NumPy ndarray 转换为工作表

如何将 NumPy ndarray 转换为工作表

如何将 NumPy ndarray 转换为 ListObject(Excel 表)

Excel 表(也称为 ListObjects)是组织和分析数据的强大方式。使用 Aspose.Cells,您可以直接将 NumPy 数组导入 ListObject。

请按照以下步骤将 NumPy ndarray 转换为 ListObject(Excel 表):

  1. 创建一个带有示例数据的 NumPy 2D 数组。
  2. 初始化一个新的工作簿并访问第一个工作表。
  3. 将 NumPy 数据插入工作表单元格,使用辅助函数。
  4. 根据数组维度定义起始和结束行列。
  5. ListObject 添加到工作表,使用 worksheet.listobjects.add()
  6. ListObject 指定一个显示名称。
  7. 将工作簿另存为 Excel 文件。

以下代码示例演示了如何将 NumPy ndarray 转换为 Excel 表:

# 创建一个 NumPy 数组
data = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])

# 创建一个新的 Excel 工作簿
workbook = cells.Workbook()
worksheet = workbook.worksheets.get(0)

# 将 NumPy 数组插入工作表,从单元格 A1 开始
insert_numpy_array(worksheet, data)

# 定义 ListObject 的范围
start_row, start_col = 0, 0
end_row, end_col = data.shape[0] - 1, data.shape[1] - 1

# 从 NumPy 数据添加 ListObject(Excel 表)
index = worksheet.list_objects.add(start_row, start_col, end_row, end_col, True)
list_object = worksheet.list_objects[index]

# 为表格设置显示名称
list_object.display_name = "NumPyTable"

# 保存工作簿
workbook.save("numpy_to_listobject.xlsx")
如何将 NumPy ndarray 转换为 ListObject(Excel 表)

如何将 NumPy ndarray 转换为 ListObject(Excel 表)

将 NumPy ndarray 转换为 Range

有时您可能想将 NumPy 数组放置到特定的单元格范围内。当您需要在工作表中精确放置数据时,此方法是理想的,例如填充预定义的表格区域或将分析结果导出到选定的单元格块中。

按照以下步骤将 NumPy ndarray 转换为 Range:

  1. 创建一个 2D NumPy ndarray。
  2. 创建一个新工作簿或打开一个现有的工作簿。
  3. 选择目标工作表。
  4. 遍历 ndarray 值并插入到相应的 Excel 单元格中。
  5. 创建一个 Range 对象,使用 cells.createrange(startcell, endcell)
  6. 将填写范围的工作表导出为 Excel 文件。

以下代码示例展示了如何将 NumPy ndarray 插入到 Excel 范围中:

import numpy as np
from datetime import datetime
from aspose.cells import Workbook, CellsHelper

# 安全地将 NumPy 值放入单元格的助手
def put_cell_value(cells, raw_value, row, col):
    cell = cells.get(row, col)
    if isinstance(raw_value, (np.bool_,)):
        value = bool(raw_value)
    elif isinstance(raw_value, (np.integer,)):
        value = int(raw_value)
    elif isinstance(raw_value, (np.floating,)):
        value = float(raw_value)
    elif isinstance(raw_value, (np.datetime64,)):
        # 将 numpy datetime64 转换为 Python datetime 再转换为 Excel 兼容字符串
        value = str(np.datetime_as_string(raw_value, unit='D'))
    else:
        value = raw_value
    cell.put_value(value)

# 将 NumPy 数组插入单元格并返回范围的函数
def numpy_to_range(cells, data, start_row=0, start_col=0):
    rows, cols = data.shape
   for i in range(rows):
       for j in range(cols):
            put_cell_value(cells, data[i, j], start_row + i, start_col + j)

    # 根据起始/结束单元格定义范围
    start_cell = CellsHelper.cell_index_to_name(start_row, start_col)
    end_cell = CellsHelper.cell_index_to_name(start_row + rows - 1, start_col + cols - 1)
    return cells.create_range(start_cell, end_cell)

# 创建一个示例 NumPy 数组
data = np.array([
    ['City', 'Region', 'Store', 'Date'],
    ['Chicago', 'Central', 3055, np.datetime64('2025-01-15')],
    ['New York', 'East', 3036, np.datetime64('2025-02-10')],
    ['Detroit', 'Central', 3074, np.datetime64('2025-03-05')]
])

# 创建一个新工作簿并获取第一个工作表
workbook = Workbook()
worksheet = workbook.worksheets.get(0)
cells = worksheet.cells

# 将 ndarray 插入到工作表中作为范围
range_obj = numpy_to_range(cells, data, 0, 0)

print("Row count:", range_obj.row_count)
print("Column count:", range_obj.column_count)

# 保存工作簿
workbook.save("numpy_to_range.xlsx")
如何将 NumPy ndarray 转换为范围

如何将 NumPy ndarray 转换为 Range

如何将 NumPy ndarray 转换为名称(命名范围)

有时候您可能想要为Excel中的特定数据范围分配一个有意义的名称。这使得在公式、图表或其他工作表中引用数据变得更加容易。在本节中,我们将向您展示如何使用Python和Aspose.Cells将NumPy转换为Excel命名范围。通过创建命名范围,您可以在Excel中更有效地处理您的NumPy数据。

按照以下步骤使用 Aspose.Cells 将 NumPy ndarray 转换为 Excel 中的命名范围

  1. 创建一个 NumPy 数组在 Python 中。
  2. 创建一个新的工作簿并访问目标工作表。
  3. 循环遍历数组,将每个值插入工作表。
  4. 定义一个覆盖导入数据的范围。
  5. 为该范围指定一个名称。
  6. 将工作簿保存为 Excel 文件。

以下代码示例演示如何将 NumPy ndarray 插入 Excel 中的命名范围:

import numpy as np
import aspose.cells
from aspose.cells import Workbook, CellsHelper

# 辅助函数将 NumPy 数据插入工作表单元格中
def put_cell_value(cells, raw_value, row, column):
    if isinstance(raw_value, (np.bool_)):
        value = bool(raw_value)
    elif isinstance(raw_value, (np.integer)):
        value = int(raw_value)
    elif isinstance(raw_value, (np.floating)):
        value = float(raw_value)
    elif isinstance(raw_value, (np.datetime64)):
        value = str(np.datetime_as_string(raw_value, unit='D'))
    else:
        value = str(raw_value)
    cells.get(row, column).put_value(value)

def insert_ndarray_into_cells(cells, data, start_row, start_col):
    row_count = data.shape[0]
    col_count = data.shape[1]

   for r in range(row_count):
       for c in range(col_count):
            put_cell_value(cells, data[r][c], start_row + r, start_col + c)

    # 返回覆盖的单元格区域
    end_row = start_row + row_count - 1
    end_col = start_col + col_count - 1
    return (start_row, start_col, end_row, end_col)

# ---------------------------
# 主代码
# ---------------------------

# 创建一个示例 NumPy 数组
data = np.array([
    ['Product', 'Region', 'Sales'],
    ['Laptop', 'East', 1200],
    ['Phone', 'West', 950],
    ['Tablet', 'North', 740]
])

# 创建一个新的工作簿
workbook = Workbook()
worksheet = workbook.worksheets.get(0)
cells = worksheet.cells

# 将 ndarray 插入到从 (0,0) 开始的单元格中
(start_row, start_col, end_row, end_col) = insert_ndarray_into_cells(cells, data, 0, 0)

# 获取 Excel 单元格引用
start_cell = CellsHelper.cell_index_to_name(start_row, start_col)
end_cell = CellsHelper.cell_index_to_name(end_row, end_col)

# 为这个 ndarray 创建一个命名范围
idx = workbook.worksheets.names.add("SalesData")  # returns index
named_range = workbook.worksheets.names[idx]  # get the Name object
named_range.refers_to = f"={worksheet.name}!{start_cell}:{end_cell}"

# 保存工作簿
workbook.save("numpy_to_named_range.xlsx")
如何将 NumPy ndarray 转换为名称(命名范围)

如何将 NumPy ndarray 转换为名称(命名范围)

开始使用 Aspose.Cells for Python

您现在已经看到使用 Aspose.Cells 将 NumPy 数组转换为 Excel 是多么简单。该库为您提供了对工作簿、工作表、表格、范围和命名范围的完全控制权。

这里有一些有用的链接,可以增强您的理解:

获取一个 免费临时许可证,今天就开始使用 Aspose.Cells,使您的 Python 数据与 Excel 工作流完全兼容。

NumPy to Excel: 常见问题解答

Q1: 我需要安装 Microsoft Excel 才能使用 Aspose.Cells 吗?

不。Aspose.Cells 独立工作。您不需要安装 Excel 或任何其他软件。

Q2: Aspose.Cells 能处理大型 NumPy 数组吗?

是的。这个库经过优化,适用于大型数据集,即使面对大数组时也能表现良好。

Q3: 支持哪些 Excel 格式?

您可以将您的 NumPy 数据保存为 XLSX、XLS、CSV、ODS 和许多其他电子表格格式。

Q4: 我可以在导出 NumPy 数据后格式化 Excel 单元格吗?

是的。您可以应用样式、数字格式、公式,甚至创建图表或透视表。

Q5: 是否有 Aspose.Cells 的免费版本?

是的。您可以下载一个 免费试用 或申请一个 临时许可证 进行测试。

结论

NumPy 是 Python 中数据科学和数值分析的核心工具,但现实世界的报告通常需要 Excel。通过 Aspose.Cells for .NET for Python,将 NumPy 转换为 Excel 变得无缝而灵活。在本指南中,我们探讨了不同的方法:将 NumPy 数组导出到完整的工作簿、将数据插入工作表、格式化为 ListObject(Excel 表)、将数组映射到一个范围以及将它们分配给命名范围。每种方法都有其独特的目的。通过将 NumPy 的强大功能与 Aspose.Cells 的灵活性结合起来,您可以高效地从基于 Python 的分析转向专业的 Excel 报告,确保您的数据既可访问又准备好呈现。

如果您有任何问题,请随时在我们的 free support forum 提出,我们将很乐意提供帮助。

另请参见