NumPy - 處理缺失資料



處理陣列中的缺失資料

處理缺失資料是資料分析和處理中常見的一個挑戰。陣列中的缺失資料可能由於各種原因而產生,例如資料收集不完整、資料輸入錯誤或故意省略。

在 NumPy 和資料分析中,處理缺失值涉及有效地識別、處理和處理它們,以確保資料完整性和準確的結果。

識別缺失資料

為了處理缺失資料,第一步是識別它。在 NumPy 中,缺失值通常在浮點陣列中表示為 np.nan。您可以使用特定的函式,例如 **np.isnan()** 來檢測這些缺失值。

示例

在下面的示例中,我們建立了一個包含由 **np.nan** 表示的缺失值的陣列。然後,我們使用 np.isnan() 函式建立一個掩碼來識別這些缺失值 -

import numpy as np

# Creating an array with missing values
arr = np.array([1, 2, np.nan, 4, np.nan, 6])

# Checking for missing values
is_nan = np.isnan(arr)

print("Array with Missing Values:\n", arr)
print("Missing Value Mask:\n", is_nan)

以下是獲得的輸出 -

Array with Missing Values:
[ 1.  2. nan  4. nan  6.]
Missing Value Mask:
[False False  True False  True False]

刪除缺失資料

刪除缺失資料涉及消除資料集中資料缺失的部分。

在 NumPy 中,您可以使用 **布林索引** 從陣列中排除 **NaN** 值。例如,建立一個識別缺失值的掩碼,然後使用它來過濾掉這些值。

示例

在這個例子中,我們從一個包含由“np.nan”表示的缺失值的陣列開始。然後,我們使用布林索引刪除這些缺失值,使用 np.isnan() 函式過濾掉 np.nan 條目 -

import numpy as np

# Creating an array with missing values
arr = np.array([1, 2, np.nan, 4, np.nan, 6])

# Removing missing values
cleaned_arr = arr[~np.isnan(arr)]

print("Original Array:\n", arr)
print("Array with Missing Values Removed:\n", cleaned_arr)

這將產生以下結果 -

Original Array:
[ 1.  2. nan  4. nan  6.]
Array with Missing Values Removed:
[1. 2. 4. 6.]

替換缺失資料

替換缺失資料意味著用替代值填充資料缺失的地方。在 NumPy 中,您可以使用 **np.nan_to_num()** 函式用特定數字(例如零或其他值的平均值)替換 **NaN** 值。以下是語法 -

numpy.nan_to_num(x, copy=True, nan=0.0, posinf=None, neginf=None)

其中,

  • **x:** 包含 NaN 值、無窮大或其他數值的輸入陣列。
  • **copy:** 一個布林值,指示是否要建立陣列的副本(預設為 True)。如果為 False,則操作可能會就地執行。
  • **nan:** 用於替換 NaN 值的值。預設為 0.0。
  • **posinf:** 用於替換正無窮大 (inf) 的值。如果未指定,則預設為一個非常大的數字。
  • **neginf:** 用於替換負無窮大 (-inf) 的值。如果未指定,則預設為一個非常小的(負)數字。

示例

在下面的示例中,我們建立了一個包含由“np.nan”表示的缺失值的陣列。然後,我們使用 np.nan_to_num() 函式將這些缺失值替換為零,該函式用指定的值填充 np.nan 條目 -

import numpy as np

# Creating an array with missing values
arr = np.array([1, 2, np.nan, 4, np.nan, 6])

# Replacing missing values with zero
filled_arr = np.nan_to_num(arr, nan=0)

print("Original Array:\n", arr)
print("Array with Missing Values Replaced:\n", filled_arr)

以下是上述程式碼的輸出 -

Original Array:
[ 1.  2. nan  4. nan  6.]
Array with Missing Values Replaced:
[1. 2. 0. 4. 0. 6.]

插值缺失資料

插值缺失資料涉及根據周圍資料估計和填充資料集中缺失的值。

插值不是用像平均值這樣的常數替換缺失值,而是透過分析資料中的趨勢或模式來預測缺失值應該是什麼。

例如,如果“4”和“8”之間缺少一個值,則插值可能會將其估計為“6”。

示例

在下面的示例中,我們透過使用 SciPy 中的“interp1d”應用線性插值來處理包含缺失值 (np.nan) 的陣列。此函式根據非缺失資料估計和填充缺失值,從而產生一個完整的陣列 -

import numpy as np
from scipy.interpolate import interp1d

# Creating an array with missing values
arr = np.array([1, 2, np.nan, 4, np.nan, 6])

# Creating an index array
indices = np.arange(len(arr))

# Creating a mask for non-missing values
mask = ~np.isnan(arr)

# Performing linear interpolation
interp_func = interp1d(indices[mask], arr[mask], kind='linear', fill_value='extrapolate')
filled_arr = interp_func(indices)

print("Original Array:\n", arr)
print("Array with Interpolated Missing Values:\n", filled_arr)

獲得的輸出如下所示 -

Original Array:
 [ 1.  2. nan  4. nan  6.]
Array with Interpolated Missing Values:
 [1. 2. 3. 4. 5. 6.]
廣告