
- NumPy 教程
- NumPy - 首頁
- NumPy - 簡介
- NumPy - 環境配置
- NumPy 陣列
- NumPy - Ndarray 物件
- NumPy - 資料型別
- NumPy 陣列的建立和操作
- NumPy - 陣列建立例程
- NumPy - 陣列操作
- NumPy - 從現有資料建立陣列
- NumPy - 從數值範圍建立陣列
- NumPy - 陣列迭代
- NumPy - 陣列重塑
- NumPy - 陣列連線
- NumPy - 陣列堆疊
- NumPy - 陣列分割
- NumPy - 陣列扁平化
- NumPy - 陣列轉置
- NumPy 索引和切片
- NumPy - 索引和切片
- NumPy - 高階索引
- NumPy 陣列屬性和運算
- NumPy - 陣列屬性
- NumPy - 陣列形狀
- NumPy - 陣列大小
- NumPy - 陣列步幅
- NumPy - 陣列元素大小
- NumPy - 廣播
- NumPy - 算術運算
- NumPy - 陣列加法
- NumPy - 陣列減法
- NumPy - 陣列乘法
- NumPy - 陣列除法
- NumPy 高階陣列運算
- NumPy - 交換陣列軸
- NumPy - 位元組交換
- NumPy - 複製和檢視
- NumPy - 元素級陣列比較
- NumPy - 陣列過濾
- NumPy - 陣列連線
- NumPy - 排序、搜尋和計數函式
- NumPy - 陣列搜尋
- NumPy - 陣列的並集
- NumPy - 查詢唯一行
- NumPy - 建立日期時間陣列
- NumPy - 二元運算子
- NumPy - 字串函式
- NumPy - 數學函式
- NumPy - 統計函式
- NumPy - 矩陣庫
- NumPy - 線性代數
- NumPy - Matplotlib
- NumPy - 使用 Matplotlib 繪製直方圖
- NumPy - NumPy 的 I/O 操作
- NumPy 排序和高階操作
- NumPy - 陣列排序
- NumPy - 沿軸排序
- NumPy - 使用花式索引排序
- NumPy - 結構化陣列
- NumPy - 建立結構化陣列
- NumPy - 操作結構化陣列
- NumPy - 欄位訪問
- NumPy - 記錄陣列
- Numpy - 載入陣列
- Numpy - 儲存陣列
- NumPy - 向陣列追加值
- NumPy - 交換陣列列
- NumPy - 向陣列插入軸
- NumPy 缺失資料處理
- NumPy - 缺失資料處理
- NumPy - 缺失值識別
- NumPy - 刪除缺失資料
- NumPy - 缺失資料插補
- NumPy 效能最佳化
- NumPy - 使用陣列進行效能最佳化
- NumPy - 使用陣列進行向量化
- NumPy - 陣列的記憶體佈局
- Numpy 線性代數
- NumPy - 線性代數
- NumPy - 矩陣庫
- NumPy - 矩陣加法
- NumPy - 矩陣減法
- NumPy - 矩陣乘法
- NumPy - 元素級矩陣運算
- NumPy - 點積
- NumPy - 矩陣求逆
- NumPy - 行列式計算
- NumPy - 特徵值
- NumPy - 特徵向量
- NumPy - 奇異值分解
- NumPy - 求解線性方程組
- NumPy - 矩陣範數
- NumPy 元素級矩陣運算
- NumPy - 求和
- NumPy - 求平均值
- NumPy - 求中位數
- NumPy - 求最小值
- NumPy - 求最大值
- NumPy 集合運算
- NumPy - 唯一元素
- NumPy - 交集
- NumPy - 並集
- NumPy - 差集
- NumPy 有用資源
- NumPy 編譯器
- NumPy - 快速指南
- NumPy - 有用資源
- NumPy - 討論
NumPy - 缺失值識別
識別陣列中的缺失值
識別陣列中的缺失值意味著找到資料缺失的位置,在 NumPy 中通常用 NaN(非數字)表示。可以使用 NumPy 的 np.isnan() 函式來識別陣列中的缺失值。
NaN 是由 IEEE 浮點數標準定義的一種特殊的浮點數。它用於表示未定義或不可表示的值,例如 0/0 的結果或涉及 NaN 的數學運算的結果。
使用 isnan() 函式
NumPy 中的 np.isnan() 函式用於識別陣列中的 NaN(非數字)值。
此函式檢查陣列中的每個元素,並返回一個形狀相同的布林陣列,其中每個元素如果對應於原始陣列中的元素是 NaN,則為 True,否則為 False。以下是語法:
numpy.isnan(x)
其中,x 是要檢查 NaN 值的輸入陣列。
示例
在下面的示例中,我們使用 np.isnan() 函式建立一個掩碼來識別陣列中的 NaN 值:
import numpy as np # Creating an array with NaN values arr = np.array([1.0, 2.5, np.nan, 4.7, np.nan, 6.2]) # Identifying NaN values using np.isnan() nan_mask = np.isnan(arr) print("Original Array:\n", arr) print("NaN Mask:\n", nan_mask)
獲得的輸出如下:
Original Array: [1. 2.5 nan 4.7 nan 6.2] NaN Mask: [False False True False True False]
識別多維陣列中的缺失值
識別多維陣列中的缺失值是指檢測陣列各個維度上的 NaN 值,例如在二維矩陣或三維張量中。
此過程類似於處理一維陣列,但是需要處理多個維度,同時要清楚缺失值的位置。
示例
在這個例子中,我們使用 np.isnan() 函式建立一個掩碼來識別二維陣列中的 NaN 值:
import numpy as np # Creating a 2D array with NaN values arr_2d = np.array([[1.0, np.nan, 3.5], [np.nan, 5.1, 6.3]]) # Identifying NaN values in the 2D array nan_mask_2d = np.isnan(arr_2d) print("Original 2D Array:\n", arr_2d) print("NaN Mask 2D:\n", nan_mask_2d)
這將產生以下結果:
Original 2D Array: [[1. nan 3.5] [nan 5.1 6.3]] NaN Mask 2D: [[False True False] [ True False False]]
識別結構化陣列中的缺失值
識別結構化陣列中的缺失值包括檢測陣列欄位中的 NaN 或其他佔位符,尤其是在陣列包含混合資料型別和多個欄位時。
結構化陣列很複雜,因為每個欄位都可以有自己的資料型別,因此處理缺失值需要單獨關注每個欄位。
示例
在下面的示例中,我們使用 np.isnan() 函式建立一個掩碼來識別結構化陣列的 'age' 欄位中的 NaN 值:
import numpy as np # Creating a structured array with NaN values dtype = [('name', 'U10'), ('age', 'f8')] structured_arr = np.array([('Alice', 25), ('Bob', np.nan), ('Cathy', 23)], dtype=dtype) # Checking for NaN values in the 'age' field nan_mask_structured = np.isnan(structured_arr['age']) print("Structured Array:\n", structured_arr) print("NaN Mask for 'age' field:\n", nan_mask_structured)
以上程式碼的輸出如下:
Structured Array: [('Alice', 25.) ('Bob', nan) ('Cathy', 23.)] NaN Mask for 'age' field: [False True False]
計算陣列中缺失值的個數
要確定陣列中缺失值的個數,可以使用 np.isnan() 函式,該函式返回一個布林陣列,指示 NaN 值的位置。
此布林陣列中的每個元素如果對應於原始陣列中的元素是 NaN,則為“True”,否則為“False”。透過對這個布林陣列求和,可以有效地計算 True 值的個數,這對應於缺失值的個數。
示例
在下面的示例中,我們使用 np.isnan() 函式生成一個布林掩碼來識別陣列中的 NaN 值。然後,我們透過對掩碼求和來計算 NaN 值的個數,從而得到缺失值的總數:
import numpy as np # Create an array with some NaN values arr = np.array([1.0, 2.0, np.nan, 4.0, np.nan]) # Generate a boolean array indicating NaN values nan_mask = np.isnan(arr) # Count the number of NaN values nan_count = np.sum(nan_mask) print("Boolean mask of NaN values:") print(nan_mask) print("Number of NaN values:") print(nan_count)
獲得的輸出如下所示:
Boolean mask of NaN values: [False False True False True] Number of NaN values: 2
使用 np.isnan() 函式進行布林索引
使用 np.isnan() 函式識別缺失值後,可以將其與布林索引結合使用,對這些值執行各種操作。
布林索引允許根據條件(例如,元素是否為 NaN)建立掩碼,然後使用此掩碼來過濾、替換或分析滿足此條件的元素。
示例:過濾掉缺失值
可以使用布林索引從陣列中過濾掉缺失值,只保留非缺失值:
import numpy as np # Create an array with some NaN values arr = np.array([1.0, 2.0, np.nan, 4.0, np.nan]) # Generate a boolean array indicating NaN values nan_mask = np.isnan(arr) # Filter out NaN values filtered_arr = arr[~nan_mask] print("Original array:") print(arr) print("Filtered array (without NaN values):") print(filtered_arr)
執行上述程式碼後,我們將得到以下輸出:
Original array: [ 1. 2. nan 4. nan] Filtered array (without NaN values): [1. 2. 4.]
示例:替換缺失值
可以使用特定值替換 NaN 值,例如非缺失值的平均值或中位數:
import numpy as np # Create an array with some NaN values arr = np.array([1.0, 2.0, np.nan, 4.0, np.nan]) # Calculate the mean of non-NaN values mean_value = np.nanmean(arr) # Replace NaN values with the mean value arr_with_replacement = np.where(np.isnan(arr), mean_value, arr) print("Original array:") print(arr) print("Array with NaN replaced by mean:") print(arr_with_replacement)
產生的結果如下:
Original array: [ 1. 2. nan 4. nan] Array with NaN replaced by mean: [1. 2. 2.33333333 4. 2.33333333]
示例:分析缺失值
可以使用布林索引分析缺失值的分佈或模式,例如檢查哪些行或列具有缺失資料:
import numpy as np # Create a 2D array with some NaN values arr_2d = np.array([[1.0, np.nan, 3.0], [4.0, np.nan, 6.0], [np.nan, 8.0, 9.0]]) # Identify NaN values nan_mask_2d = np.isnan(arr_2d) # Count NaN values per row nan_count_per_row = np.sum(nan_mask_2d, axis=1) print("Original 2D array:") print(arr_2d) print("NaN count per row:") print(nan_count_per_row)
我們將得到如下所示的輸出:
Original 2D array: [[ 1. nan 3.] [ 4. nan 6.] [nan 8. 9.]] NaN count per row: [1 1 1]