當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python Pandas DataFrame fillna方法用法及代碼示例


Pandas 的DataFrame.fillna(~) 方法用指定值或填充規則填充NaN(缺失值)。

參數

1.value | scalardictSeriesDataFrame | optional

要替換 NaN 的值。如果指定了 dictSeries,則鍵/索引是列標簽,值是填充符。

2. method | Nonestring | optional

填充 NaN 的規則:

說明

"backfill""bfill"

使用下一個非NaN 值進行填充。

"pad""ffill"

使用之前的非NaN值來填充。

None

不執行任何填充。

默認情況下,method=None

警告

僅指定 valuemethod - 不能同時指定兩者。

3. axis | intstring | optional

是否填充每列或每行:

說明

0"index"

按列填充

1"columns"

按行填充

默認情況下,axis=0 。請注意,僅當您指定 method 而不是 value 時,這才相關。

4. inplace | boolean | optional

  • 如果是True,那麽該方法將直接修改源DataFrame,而不是創建新的DataFrame。

  • 如果是False,則將創建並返回一個新的DataFrame。

默認情況下,inplace=False

5. limit | Noneint | optional

  • 如果指定method,則limit 是要填充的連續NaN 的最大數量。如果連續NaN的數量超過limit ,則不進行填充。

  • 如果未指定method,則limit 是每行或每列執行的最大填充數。

默認情況下,limit=None

返回值

DataFrame,其中 NaN 被填充符替換。

例子

考慮以下 DataFrame :

df = pd.DataFrame({"A":[None,5,6],"B":[7,None,8],"C":[9,None,None]})
df



   A    B    C
0  NaN  7.0  9.0
1  5.0  NaN  NaN
2  6.0  8.0  NaN

填充一個值

要使用值 10 填充 NaN

df.fillna(10)



   A     B     C
0  10.0  7.0   9.0
1  5.0   10.0  10.0
2  6.0   8.0   10.0

僅填充某些列

要指定要填充的列,請提供 dictSeries,如下所示:

df.fillna({"A":"*","C":10})



   A  B    C
0  *  7.0  9.0
1  5  NaN  10.0
2  6  8.0  10.0

請注意,B 列在此處仍然具有 NaN,因為提供的 dict 沒有 B 鍵。

指定填充方法

考慮與之前相同的df

df



   A    B    C
0  NaN  7.0  9.0
1  5.0  NaN  NaN
2  6.0  8.0  NaN
向後填充

要按列填充 NaN ,使用下一個非 NaN 值:

df.fillna(method="bfill")   # or method="backfill"



   A    B    C
0  5.0  7.0  9.0
1  5.0  8.0  NaN
2  6.0  8.0  NaN

請注意我們還剩下一些NaN。這是因為 NaN 之後沒有任何值,因此我們沒有填充值。

前向填充

要使用之前的非 NaN 值按列填充 NaN

df.fillna(method="ffill")   # or method="pad"



   A    B    C
0  NaN  7.0  9.0
1  5.0  7.0  9.0
2  6.0  8.0  9.0

同樣,我們在 A[0] 處有一個 NaN,因為 NaN 之前沒有任何值,因此我們沒有填充值。

指定軸

僅供參考,這裏是相同的 df

df



   A    B    C
0  NaN  7.0  9.0
1  5.0  NaN  NaN
2  6.0  8.0  NaN

默認情況下, axis=0 ,這意味著填充方法按列應用:

df.fillna(method="ffill")      # axis=0



   A    B    C
0  NaN  7.0  9.0
1  5.0  7.0  9.0
2  6.0  8.0  9.0

我們可以通過設置 axis=1 來執行逐行填充:

df.fillna(method="ffill", axis=1)



   A    B    C
0  NaN  7.0  9.0
1  5.0  5.0  5.0
2  6.0  8.0  8.0

請注意,僅當您指定 method 參數而不是 value 時,axis 參數才相關。

指定限製

當指定參數方法時

如果method被指定,那麽limit是最大數量連續的 NaN填寫。

僅供參考,這裏是相同的 df

df



   A    B    C
0  NaN  7.0  9.0
1  5.0  NaN  NaN
2  6.0  8.0  NaN

要將連續 NaN 的數量限製為 1

df.fillna(method="ffill", limit=1)



   A    B    C
0  NaN  7.0  9.0
1  5.0  7.0  9.0
2  6.0  8.0  NaN

請注意單元格 C[2] 仍然具有 NaN 值。這是因為我們這裏有 2 個連續的 NaN ,並且由於我們指定了 limit=1 ,所以隻有第一個被填充。

未指定參數方法時

當未指定 method 時,limit 表示每行或每列執行的最大填充數。例如,考慮以下 DataFrame:

df = pd.DataFrame({"A":[None,5,None],"B":[7,None,8],"C":[9,None,None]})
df



   A    B    C
0  NaN  7.0  9.0
1  5.0  NaN  NaN
2  NaN  8.0  NaN

使用 limit=1 執行填充會產生:

df.fillna(2, limit=1)



   A    B    C
0  2.0  7.0  9.0
1  5.0  2.0  2.0
2  NaN  8.0  NaN

請注意 AC 列中仍然包含 NaN

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | fillna method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。