在 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 是 最佳 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:
- 使用
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:
- 載入 Excel 檔案使用
Workbook類別。 - 通過其索引訪問目標工作表。
- 獲取最大使用的行和列。
- 逐行逐列遍歷以收集單元格的值。
- 將提取的數據儲存於一個列表中。
- 將列表轉換為 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 提問,我們將樂意提供幫助。
