在 Python 中处理 Excel 数据是很常见的。这通常涉及将数据从 Excel 移动到一个可以高效操作的形式。将 Excel 数据转换为准备分析的格式可能很棘手。在这篇博客文章中,您将学习如何仅用几行代码将 Excel 转换为 NumPy 数组。

为什么选择 NumPy?

NumPy(数值Python)是一个开源的Python库。它是Python中数据科学和机器学习的支柱。NumPy提供快速的数组操作和高效的数值计算。它与pandas、TensorFlow和scikit-learn顺畅协作。该库支持多维数组、矩阵、线性代数和傅里叶变换。数组使用连续内存,使其比Python列表更快。这种速度使NumPy成为科学计算和数据分析的核心工具。

Excel 被广泛用于存储数据集,但它并未针对 Python 工作流进行优化。传统的转换方法通常需要额外的库、多步操作和手动解析。Aspose.Cells 允许您直接将数据从 ExcelTSVCSVJSON 格式导出到 NumPy 数组中。这将电子表格与 Python 的数值工具连接起来。

Aspose.Cells for Python 是什么?

Aspose.Cells最佳的 Python Excel 库 开发者。它允许读取、创建和操作电子表格,而无需依赖 Microsoft Excel。通过 .NET 的 Python 变体嵌入了 Aspose.Cells 的 .NET 版本,并将其暴露给 Python。Aspose.Cells 简化了将 Excel 转换为 NumPy 的过程。它允许您将整个工作簿、工作表、范围、行、列,甚至整个列表对象直接导出到 NumPy ndarrays。这意味着您可以在最小的努力下,从原始的 Excel 文件转换为干净的、可用于分析或机器学习的数据。

您可以从 PyPI 安装它:

pip install aspose‑cells‑python

一旦安装,导入该库与 NumPy 一起:

import aspose.cells as cells
import numpy as np

如何将 Excel 工作簿转换为 NumPy

一个工作簿可能包含多个工作表。您可以一次性将整个 Excel 工作簿导出为 NumPy ndarray。这在您想直接在 Python 中处理来自所有工作表的数据时非常方便。

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

  1. 使用 Workbook 类加载 Excel 工作簿。
  2. 访问工作簿中的所有工作表。
  3. 循环遍历每个工作表,以读取其使用的行和列。
  4. 逐行提取单元格值。
  5. 将每个表的数据存储到一个列表的列表中。
  6. 将收集的数据转换为 NumPy ndarray,使用 np.asarray().

这里是一个简化的 Python 脚本,用于导出一个示例工作簿:

import aspose.cells as cells
import numpy as np

# 加载工作簿
workbook = cells.Workbook("sample_data.xlsx")
sheets = workbook.worksheets

# 准备一个空列表来保存表格数据
sheets_data = []

# 遍历工作表
for sheet in sheets:
    # sheet = workbook.worksheets.get(sheetindex)
    sheet_cells = sheet.cells
    max_row = sheet_cells.max_data_row + 1  # number of populated rows
    max_col = sheet_cells.max_data_column + 1  # number of populated columns

    sheet_rows = []
   for r in range(max_row):
        row_values = []
       for c in range(max_col):
            cell = sheet_cells.check_cell(r, c)
            row_values.append(cell.value if cell else "")
        sheet_rows.append(row_values)
    sheets_data.append(sheet_rows)

# 转换为 ndarray,dtype=object 以保留字符串
excel_array = np.asarray(sheets_data, dtype=object)
print(excel_array)
如何将 Excel 工作簿转换为 NumPy

如何将 Excel 工作簿转换为 NumPy

该脚本将任何空白单元格替换为空字符串,并将所有工作表合并为一个 NumPy 数组。最终的 excelarray 是三维的:第一层表示工作表,第二层表示行,第三层表示列。

[[['City', 'Region', 'Store'],
  ['Chicago', 'Central', '3055'],
  ['New York', 'East', '3036'],
  ['Detroit', 'Central', '3074']],

 [['City2', 'Region2', 'Store3'],
  ['Seattle', 'West', '3000'],
  ['philadelph', 'East', '3082'],
  ['Detroit', 'Central', '3074']],

 [['City3', 'Region3', 'Store3'],
  ['Seattle', 'West', '3166'],
  ['New York', 'East', '3090'],
  ['Chicago', 'Central', '3055']]]

将单个工作表转换为NumPy

有时候,您可能想要处理单个工作表,而不是整个工作簿。您可以直接提取一个工作表的单元格值,并通过以下步骤将其转换为 NumPy ndarray:

  1. 加载带有 Workbook 类的 Excel 文件。
  2. 通过其索引访问目标工作表。
  3. 获取使用最多的行和列。
  4. 遍历每一行和每一列以收集单元格值。
  5. 将提取的数据存储在一个列表中。
  6. 将列表转换为 NumPy ndarray,使用 np.asarray().

这是导出单个工作表的 Python 脚本:

import aspose.cells as cells
import numpy as np

# 加载工作簿
workbook = cells.Workbook("sample_data.xlsx")

# 访问第一个工作表
sheet = workbook.worksheets[0]

# 获取最大行数和列数的数据
max_row = sheet.cells.max_data_row + 1
max_col = sheet.cells.max_data_column + 1

# extract data
rows = []
for r in range(max_row):
    row_values = []
   for c in range(max_col):
        cell = sheet.cells.check_cell(r, c)
        row_values.append(cell.value if cell else "")
    rows.append(row_values)

# 转换为 numpy ndarray
worksheet_array = np.asarray(rows, dtype=object)
print(worksheet_array)

这创建了一个 2D ndarray,其中行映射到 Excel 行,列映射到 Excel 列。

[['City' 'Region' 'Store']    
 ['Chicago' 'Central' '3055'] 
 ['New York' 'East' '3036']   
 ['Detroit' 'Central' '3074']]

如何将 Excel 的范围转换为 NumPy

在某些情况下,您只需要特定范围的单元格。Aspose.Cells 允许您定义一个范围并直接将其导出到 NumPy ndarray。

按照以下步骤进行:

  1. 加载带有 Workbook 类的工作簿。
  2. 选择目标工作表。
  3. 使用 worksheet.cells.createrange() 方法定义一个范围。
  4. 遍历范围的行和列以提取值。
  5. 将值转换为 NumPy ndarray,使用 np.asarray().

以下代码示例演示了如何将Excel中的一系列单元格转换为NumPy ndarray:

import aspose.cells as cells
import numpy as np

# 加载工作簿
workbook = cells.Workbook("sample_data.xlsx")

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

# 定义一个范围 (B1 到 C3)
cell_range = sheet.cells.create_range("B1", "C3")

# 从范围中提取数据
range_data = []
for r in range(cell_range.row_count):
    row_values = []
   for c in range(cell_range.column_count):
        cell = sheet.cells.check_cell(r, c)
        row_values.append(cell.value if cell else "")
    range_data.append(row_values)

# 转换为 numpy ndarray
range_array = np.asarray(range_data, dtype=object)
print(range_array)

如果所选范围覆盖两列和三行,结果数组将是 3×2,例如:

[['City' 'Region']
 ['Chicago' 'Central']
 ['New York' 'East']]

将 Excel 表格 (ListObject) 转换为 NumPy

一个 Excel 表是一个带有标题和行的结构化数据范围。在 Aspose.Cells 中,这表示为一个 ListObject。您可以轻松地将 Excel 表的内容导出为 NumPy ndarray,以便在 Python 中进行进一步处理。

  1. 加载工作簿并选择工作表。
  2. 从工作表中访问 ListObject(Excel 表)。
  3. 将表格数据导出为二维数组。
  4. 将数组转换为 NumPy ndarray。
  5. 使用 ndarray 进行数据科学或机器学习工作流。

以下代码示例演示如何将Excel表格(ListObject)导出到NumPy:

import aspose.cells as cells
import numpy as np

# 加载Excel文件
workbook = cells.Workbook("sample_data.xlsx")
sheet = workbook.worksheets.get(0)

# 创建一个覆盖 A1:C4 的表格,包含标题
index = sheet.list_objects.add("A1", "C4", True)
table = sheet.list_objects[index]

rows = []
for r in range(table.start_row, table.end_row + 1):
    row_vals = []
   for c in range(table.start_column, table.end_column + 1):
        cell = sheet.cells.check_cell(r, c)
        row_vals.append(cell.value if cell else "")
    rows.append(row_vals)

list_object_array = np.asarray(rows, dtype=object)
print(list_object_array)

生成的 NumPy ndarray 将包含 Excel 表的行和列,包括如果它们是数据范围的一部分的标题。

[['City', 'Region', 'Store'],
 ['Chicago', 'Central', '3055'],
 ['New York', 'East', '3036'],
 ['Detroit', 'Central', '3074']]

如何将Excel中的一行转换为NumPy

有时您只需要从 Excel 中提取单行数据。Aspose.Cells 使提取一行并直接加载到 NumPy ndarray 中变得简单。

  1. 加载 Excel 工作簿。
  2. 选择工作表。
  3. 选择您想要导出的行索引。
  4. 导出行值作为数组。
  5. 将数组转换为 NumPy ndarray 以便处理。

以下Python代码展示了如何将Excel表格的一行转换为NumPy ndarray:

import aspose.cells as cells
import numpy as np

# 加载 Excel 文件
workbook = cells.Workbook("sample_data.xlsx")
sheet = workbook.worksheets.get(0)
sheet_cells = sheet.cells

max_col = sheet_cells.max_data_column + 1

# 选择一行(例如,最后数据行)
row_index = sheet_cells.max_data_row
row_vals = []
for c in range(max_col):
    cell = sheet_cells.check_cell(row_index, c)
    row_vals.append(cell.value if cell else "")

row_array = np.asarray(row_vals, dtype=object)
print(row_array)

结果的 NumPy ndarray 将是一个一维数组,包含所选行中的所有值。

['Detroit' 'Central' 3074]

将 Excel 列转换为 NumPy 数组

在某些情况下,您可能只需要Excel表格中单列的值。Aspose.Cells让您轻松导出一列并将其转换为NumPy ndarray。

  1. 加载 Excel 工作簿。
  2. 选择目标工作表。
  3. 选择要导出的列索引。
  4. 导出列值。
  5. 将值转换为 NumPy ndarray。

以下 Python 代码演示了如何将 Excel 表中的一列转换为 NumPy ndarray:

import aspose.cells as cells
import numpy as np

# 加载 Excel 文件
workbook = cells.Workbook("D:\\Files\\sample_data.xlsx")
sheet = workbook.worksheets.get(0)
sheet_cells = sheet.cells
max_row = sheet_cells.max_data_row + 1

# 选择一列(例如,最后的数据列)
col_index = sheet_cells.max_data_column
col_vals = []
for r in range(max_row):
    cell = sheet_cells.check_cell(r, col_index)
    col_vals.append(cell.value if cell else "")

column_array = np.asarray(col_vals, dtype=object)
print(column_array)

生成的 NumPy ndarray 将是一个一维数组,包含来自所选列的所有值。

['Store' 3055 3036 3074]

使用 Aspose.Cells 和 NumPy 的提示

  • 内存注意事项:将非常大的工作簿转换为 NumPy 数组可能会消耗大量内存。如果可能,请逐个处理工作表或读取特定范围。

  • 数据类型:如果您的电子表格包含混合类型(字符串、数字、日期),在将列表转换为NumPy数组时,请指定 dtype=object。对于同质的数字数据,您可以让NumPy推断类型。

  • 缺失值:Aspose.Cells 对于空单元格返回 None。在上面的示例中,我们用空字符串替换了它们。根据您的用例,您还可以用 np.nan 或其他哨兵值进行替换。

获取免费许可证

你想要探索 Aspose.Cells for Python 的全部功能吗?你可以请求一个 免费临时许可证。这允许你无拘无束地测试所有功能,没有限制或评估水印。

持有临时许可证,您可以:

  • 处理大型 Excel 文件。
  • Apply advanced formatting and styling.
  • 执行转换(例如,Excel 转 PDF、NumPy 等)。

这是在做出购买决策之前评估性能和与您的项目兼容性的最佳方法。

有用的资源

以下是一些有价值的资源,可以帮助您开始使用 Aspose.Cells for Python via .NET:

结论

Aspose.Cells for Python via .NET 简化了将 Excel 数据转换为 NumPy 数组的过程。无论您需要整个工作簿、单个工作表、特定范围、表格、行还是列,库都提供了清晰的方法来遍历单元格并构建 NumPy 可以使用的列表。通过结合 Aspose.Cells 读取多种电子表格格式的能力与 NumPy 的数值计算能力,您可以将 Excel 数据无缝集成到您的 Python 数据管道中。

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

另请参见