首頁 > 軟體

Python處理缺失值的8種不同方法範例

2022-06-01 18:01:25

前言

缺失值可能是資料科學中最不受歡迎的值,然而,它們總是在身邊。忽略缺失值也是不合理的,因此我們需要找到有效且適當地處理它們的方法。

在本文中,我們將介紹 8 種不同的方法來解決缺失值問題,哪種方法最適合特定情況取決於資料和任務。

讓我們首先建立一個範例資料框並向其中新增一些缺失值。

我們有一個 10 行 6 列的資料框。

下一步是新增缺失值。 我們將使用 loc 方法選擇行和列組合,並使它們等於“np.nan”,這是標準缺失值表示之一。

這是資料框現在的樣子:

item 和 measure 1 列具有整數值,但由於缺少值,它們已被向上轉換為浮點數。

在 Pandas 1.0 中,引入了整數型別缺失值表示 (),因此我們也可以在整數列中包含缺失值。 但是,我們需要顯式宣告資料型別。

儘管有缺失值,我們現在可以保留整數列。

現在我們有一個包含一些缺失值的資料框。 是時候看看處理它們的不同方法了。

1. 刪除有缺失值的行或列

一種選擇是刪除包含缺失值的行或列。

使用預設引數值,dropna 函數會刪除包含任何缺失值的行。資料框中只有一行沒有任何缺失值。同時我們還可以選擇使用軸引數刪除至少有一個缺失值的列。

2. 刪除只有缺失值的行或列

另一種情況是有一列或一行充滿缺失值。 這樣的列或行是無用的,所以我們可以刪除它們。

dropna 函數也可以用於此目的。 我們只需要改變 how 引數的值。

3. 根據閾值刪除行或列

基於“any”或“all”的刪除並不總是最好的選擇。 我們有時需要刪除具有“大量”或“一些”缺失值的行或列。

我們不能將這樣的表示式分配給 how 引數,但 Pandas 為我們提供了一種更準確的方法,即 thresh 引數。

例如,“thresh=4”意味著至少有 4 個非缺失值的行將被保留。 其他的將被丟棄。

我們的資料框有 6 列,因此將刪除具有 3 個或更多缺失值的行。

只有第三行有 2 個以上的缺失值,所以它是唯一一個被丟棄的。

4. 基於特定的列子集刪除

在刪除列時,我們可以只考慮部分列。

dropna 函數的子集引數用於此任務。 例如,我們可以刪除在度量 1 或度量 2 列中有缺失值的行,如下所示:

到目前為止,我們已經看到了根據缺失值刪除行或列的不同方法。放棄並不是唯一的選擇。 在某些情況下,我們可能會選擇填充缺失值而不是刪除它們。

事實上,填充可能是更好的選擇,因為資料意味著價值。 如何填補缺失值,當然取決於資料的結構和任務。

fillna 函數用於填充缺失值。

5. 填充一個常數值

我們可以選擇一個常數值來替代缺失值。如果我們只給 fillna 函數一個常數值,它將用該值替換資料框中的所有缺失值。

更合理的方法是為不同的列確定單獨的常數值。 我們可以將它們寫入字典並將其傳遞給 values 引數。

item 列中的缺失值替換為 1014,而 measure 1 列中的缺失值替換為 0。

6. 填充聚合值

另一種選擇是使用聚合值,例如平均值、中位數或眾數。

下面這行程式碼用該列的平均值替換了第 2 列中的缺失值。

7. 替換為上一個或下一個值

可以用該列中的前一個或下一個值替換該列中的缺失值。在處理時間序列資料時,此方法可能會派上用場。 假設您有一個包含每日溫度測量值的資料框,但缺少一天的溫帶。 最佳解決方案是使用第二天或前一天的溫度。

fillna 函數的方法引數用於執行此任務。

“bfill”向後填充缺失值,以便將它們替換為下一個值。看看最後一欄。 缺失值被替換到第一行。 這可能不適合某些情況。

值得慶幸的是,我們可以限制用這種方法替換的缺失值的數量。 如果我們將 limit 引數設定為 1,那麼一個缺失值只能用它的下一個值替換。 後面的第二個或第三個值將不會用於替換。

8. 使用另一個資料框填充

我們還可以將另一個資料框傳遞給 fillna 函數。 新資料框中的值將用於替換當前資料框中的缺失值。

將根據行索引和列名稱選擇值。 例如,如果 item 列的第二行中存在缺失值,則將使用新資料框中相同位置的值。

 

以上是具有相同列的兩個資料框。 第一個 沒有任何缺失值。

我們可以使用 fillna 函數如下:

df 中的值將替換為 df2 中關於列名和行索引的值。

總結

缺失將永遠存在於我們的生活中。 沒有最好的方法來處理它們,但我們可以通過應用準確合理的方法來降低它們的影響。我們已經介紹了 8 種不同的處理缺失值的方法,使用哪一個取決於資料和任務。

到此這篇關於Python處理缺失值的8種不同方法的文章就介紹到這了,更多相關Python處理缺失值內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com