在 Python 中处理 Excel 数据是很常见的。这通常涉及将数据从 Excel 移动到一个可以高效操作的形式。将 Excel 数据转换为准备分析的格式可能很棘手。在这篇博客文章中,您将学习如何仅用几行代码将 Excel 转换为 NumPy 数组。
为什么选择 NumPy?
NumPy(数值Python)是一个开源的Python库。它是Python中数据科学和机器学习的支柱。NumPy提供快速的数组操作和高效的数值计算。它与pandas、TensorFlow和scikit-learn顺畅协作。该库支持多维数组、矩阵、线性代数和傅里叶变换。数组使用连续内存,使其比Python列表更快。这种速度使NumPy成为科学计算和数据分析的核心工具。
Excel 被广泛用于存储数据集,但它并未针对 Python 工作流进行优化。传统的转换方法通常需要额外的库、多步操作和手动解析。Aspose.Cells 允许您直接将数据从 Excel、TSV、CSV 和 JSON 格式导出到 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:
- 使用
Workbook类加载 Excel 工作簿。 - 访问工作簿中的所有工作表。
- 循环遍历每个工作表,以读取其使用的行和列。
- 逐行提取单元格值。
- 将每个表的数据存储到一个列表的列表中。
- 将收集的数据转换为 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
该脚本将任何空白单元格替换为空字符串,并将所有工作表合并为一个 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:
- 加载带有
Workbook类的 Excel 文件。 - 通过其索引访问目标工作表。
- 获取使用最多的行和列。
- 遍历每一行和每一列以收集单元格值。
- 将提取的数据存储在一个列表中。
- 将列表转换为 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。
按照以下步骤进行:
- 加载带有
Workbook类的工作簿。 - 选择目标工作表。
- 使用
worksheet.cells.createrange()方法定义一个范围。 - 遍历范围的行和列以提取值。
- 将值转换为 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 中进行进一步处理。
- 加载工作簿并选择工作表。
- 从工作表中访问 ListObject(Excel 表)。
- 将表格数据导出为二维数组。
- 将数组转换为 NumPy ndarray。
- 使用 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 中变得简单。
- 加载 Excel 工作簿。
- 选择工作表。
- 选择您想要导出的行索引。
- 导出行值作为数组。
- 将数组转换为 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。
- 加载 Excel 工作簿。
- 选择目标工作表。
- 选择要导出的列索引。
- 导出列值。
- 将值转换为 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 上提问,我们将乐意提供帮助。
