Python 使用列平均值替換 NaN 值
在本文中,我們將瞭解如何用列的平均值替換 NaN(非數字)值。在資料分析中,處理 NaN 值是一個非常關鍵的步驟。因此,在這裡您將學習各種方法,使用這些方法可以將 NaN(非數字)值替換為列的平均值。
方法 1:使用 Numpy.nanmean()。
示例
import numpy as np
arr = np.array([[1, 2, np.nan],
[4, np.nan, 6],
[np.nan, 8, 9]])
col_means = np.nanmean(arr, axis=0)
arr_filled = np.where(np.isnan(arr), col_means, arr)
print("Column mean: ",col_means)
print("Final array: \n", arr_filled)
輸出
Column mean: [2.5 5. 7.5] Final array: [[1. 2. 7.5] [4. 5. 6. ] [2.5 8. 9. ]]
解釋
在上面的示例中,我們使用 **numpy.nanmean()** 函式計算 NumPy 陣列沿特定軸(此處 axis=0 表示列)的列平均值。為了識別陣列中的 NaN 值,我們使用了 **numpy.isnan()** 函式,並使用 **numpy.where()** 將 NaN 值替換為列平均值。arr_filled 是替換 NaN 值為列平均值後的結果值。
方法 2:使用遍歷和列平均值。
示例
import numpy as np
arr = np.array([[1, 2, np.nan],
[4, np.nan, 6],
[np.nan, 8, 9]])
for i in range(arr.shape[1]):
column = arr[:, i]
column_mean = np.nanmean(column)
column[np.isnan(column)] = column_mean
print("Column mean: ",column_mean)
print("Final array: \n", arr)
輸出
Column mean: 2.5 Column mean: 5.0 Column mean: 7.5 Final array: [[1. 2. 7.5] [4. 5. 6. ] [2.5 8. 9. ]]
解釋
在上面的示例中,我們使用迴圈遍歷了 NumPy 陣列中的每一列。對於每一列,我們使用該列計算列平均值。我們將 column_mean 的值分配給 column[np.isnan(column)]。
方法 3:使用 Numpy.nan_to_num() 和 Numpy.mean()。
示例
import pandas as pd
import numpy as np
arr = np.array([[1, 2, np.nan],
[4, np.nan, 6],
[np.nan, 8, 9]])
col_means = np.nanmean(arr, axis=0)
arr_filled = np.nan_to_num(arr, nan=col_means)
print("Column mean: ",col_means)
print("Final array: \n", arr_filled)
輸出
Column mean: [2.5 5. 7.5] Final array: [[1. 2. 7.5] [4. 5. 6. ] [2.5 8. 9. ]]
解釋
在上面的示例中,我們使用了 **numpy.nan_to_num()** 方法,該方法用於將 NaN 值替換為任何值,方法是將我們想要替換的列平均值作為值傳遞。在 **arr_filled** 結果中,替換後的列值將位於 NaN 的位置。
方法 4:Numpy.apply_along_axis() 和列平均值。
示例
import pandas as pd
import numpy as np
arr = np.array([[1, 2, np.nan],
[4, np.nan, 6],
[np.nan, 8, 9]])
col_means = np.nanmean(arr, axis=0)
def replace_nan(column):
column[np.isnan(column)] = np.nanmean(column)
return column
arr_filled = np.apply_along_axis(replace_nan, axis=0, arr=arr)
print("Column mean: ",col_means)
print("Final array: \n", arr_filled)
輸出
Column mean: [2.5 5. 7.5] Final array: [[1. 2. 7.5] [4. 5. 6. ] [2.5 8. 9. ]]
解釋
在上面的示例中,我們使用了 **numpy.apply_along_axis()** 方法將 **replace_nan()** 函式應用於 NumPy 陣列的每一列,並指定軸(此處 axis=0 表示列)。此處的 **replace_nan()** 函式將每一列中的 NaN 值替換為列平均值。
方法 5:Numpy.nanmean() 和花式索引。
示例
import pandas as pd
import numpy as np
arr = np.array([[1, 2, np.nan],
[4, np.nan, 6],
[np.nan, 8, 9]])
col_means = np.nanmean(arr, axis=0)
mask = np.isnan(arr)
arr[mask] = col_means[np.newaxis, :].repeat(arr.shape[0], axis=0)[mask]
print("Column mean: ",col_means)
print("Final array: \n", arr)
輸出
Column mean: [2.5 5. 7.5] Final array: [[1. 2. 7.5] [4. 5. 6. ] [2.5 8. 9. ]]
解釋
在上面的示例中,我們使用了 numpy.repeat() 函式重複列平均值與 NumPy 行陣列,以匹配原始陣列的形狀。然後,我們使用花式索引將陣列中的 NaN 值替換為列平均值。此過程不需要額外的空間,因為它在原地執行修改。
方法 6:Numpy.nanmean() 和廣播。
示例
import pandas as pd
import numpy as np
arr = np.array([[1, 2, np.nan],
[4, np.nan, 6],
[np.nan, 8, 9]])
col_means = np.nanmean(arr, axis=0)
mask = np.isnan(arr)
arr[mask] = col_means
print("Column mean: ",col_means)
print("Final array: \n", arr)
輸出
Column mean: [2.5 5. 7.5] Final array: [[1. 2. 7.5] [4. 5. 6. ] [2.5 8. 9. ]]
解釋
在上面的示例中,我們使用了廣播方法將 NumPy 陣列中的 NaN 值替換為列平均值。在程式中,建立了 **mask** 變數來識別 NaN 值,並將列平均值分配給陣列中的所需位置。
因此,我們瞭解了不同的方法,可以使用這些方法將 NumPy 陣列中 NaN 值替換為列的平均值。每種方法都為我們提供了替換 NaN 值的獨特方法。您可以根據您的需求和易用性選擇任何方法。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP