在 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最佳 Excel 函式庫給 Python 開發者。它允許讀取、創建和操作電子表格,而無需依賴 Microsoft Excel。Python via .NET 變體嵌入了 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. 載入 Excel 檔案使用 Workbook 類別。
  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 提問,我們將樂意提供幫助。

另請參閱