填充 Pandas DataFrame 中的缺失值

Fariba Laiq 2023年1月30日 2022年5月16日
  1. Pandas 中 ffill() 方法的語法
  2. 使用 Pandas 中的 ffill() 方法填充 DataFrame 中的缺失值
填充 Pandas DataFrame 中的缺失值

有時,我們可能有一個缺失值的資料集。有很多方法可以使用某些方法來替換丟失的資料。

ffill()(前向填充)是替換 DataFrame 中缺失值的方法之一。此方法將 NaN 替換為先前的行或列值。

Pandas 中 ffill() 方法的語法

#Python 3.x
dataframe.ffill(axis, inplace, limit, downcast)

ffill() 方法採用四個可選引數:

  • axis 指定從何處填充缺失值。值 0 表示行,1 表示列。
  • inplace 可以是 True 或 False。True 指定在當前 DataFrame 中進行更改,而 False 表示建立具有填充值的新 DataFrame 的單獨副本。
  • limit 指定要沿軸連續填充的最大缺失值數。
  • downcast 指定要為特定資料型別填充的值字典。

使用 Pandas 中的 ffill() 方法填充 DataFrame 中的缺失值

沿行軸填充缺失值

在下面的程式碼中,我們有一個缺失值用 None 或 NaN 表示的 DataFrame。我們已經顯示了實際的 DataFrame,然後將 ffill() 方法應用於該 DataFrame。

預設情況下,ffill() 方法會沿著行/索引軸替換缺失值。NaN 將替換為該單元格上一行的值。

第一行在輸出中仍然包含 NaN,因為沒有前一行。

示例程式碼:

#Python 3.x
import pandas as pd
df=pd.DataFrame({"C1":[2,7,None,4],
                 "C2":[None,2,None,3],
                 "C3":[2,None,6,5],
                 "C4":[5,2,8,None]})
display(df)
df2 = df.ffill()
display(df2)

輸出:

沿行軸填充缺失值

沿列軸填充缺失值

在這裡,我們將指定 axis=1。它將通過觀察相應單元格的前一列中的值來填充缺失值。

在輸出中,除了兩個值之外,所有值都被填充。因為我們沒有列 1 的前一列,所以該值仍然是 NaN。

第 2 列中的值是 NaN,因為前一列中對應的單元格也是 NaN。

示例程式碼:

#Python 3.x
import pandas as pd
df=pd.DataFrame({"C1":[2,7,None,4],
                 "C2":[None,2,None,3],
                 "C3":[2,None,6,5],
                 "C4":[5,2,8,None]})
display(df)
df2 = df.ffill(axis=1)
display(df2)

輸出:

沿列軸填充缺失值

使用 limit 限制要填充的連續 NaN 的數量

我們可以使用 limit 引數來限制沿行或列軸填充的連續缺失值的數量。

在下面的程式碼中,我們有實際的 DataFrame,其中最後三行有連續的 NaN。如果我們指定 limit=2,則不能超過兩個連續的 NaN 可以沿行軸填充。

這就是為什麼最後一行中的 NaN 仍未填充的原因。

示例程式碼:

#Python 3.x
import pandas as pd
df=pd.DataFrame({"C1":[2,7,None,4],
                 "C2":[4,None,None,None],
                 "C3":[6,6,6,5],
                 "C4":[None,2,8,None]})
display(df)
df2 = df.ffill(axis=0,limit=2)
display(df2)

輸出:

使用限制引數填充

使用 inplace 填充原始 DataFrame 中的值

假設我們想要在原始 DataFrame 中進行更改,而不是在另一個 DataFrame 中複製具有填充值的 DataFrame。在這種情況下,我們可以使用值為 True 的 inplace 引數。

示例程式碼:

#Python 3.x
import pandas as pd
df=pd.DataFrame({"C1":[2,7,None,4],
                 "C2":[4,None,None,None],
                 "C3":[6,6,6,5],
                 "C4":[None,2,8,None]})
display(df)
df.ffill(inplace=True)
display(df)

輸出:

使用就地引數填充

Author: Fariba Laiq
Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

相關文章 - Pandas DataFrame