Pandas DataFrame DataFrame.fillna() 函式

Suraj Joshi 2023年1月30日 2020年6月17日
  1. pandas.DataFrame.fillna() 語法
  2. 示例程式碼:用 DataFrame.fillna() 方法填充所有 DataFrame 中的 NaN
  3. 示例程式碼:DataFrame.fillna() 方法,引數為 method
  4. 示例程式碼:DataFrame.fillna() 方法的 limit 引數
Pandas DataFrame DataFrame.fillna() 函式

pandas.DataFrame.fillna() 函式將 DataFrame 中的 NaN 值替換為某個值。

pandas.DataFrame.fillna() 語法

DataFrame.fillna(value=None,
                 method=None, 
                 axis=None, 
                 inplace=False, 
                 limit=None, 
                 downcast=None) 

引數

value scalardictSeriesDataFrame。用於替換 NaN 的值
method backfillbfillpadffillNone。用於填充 NaN 值的方法
axis 沿行(axis=0)或列(axis=1)填補缺失的數值
inplace 布林型。如果為 True,就地修改呼叫者 DataFrame
limit 整數。
如果指定了 method,則是要向前/向後填充的連續 NaN 值的最大數量。
如果沒有指定 method,則是要填充的軸的最大 NaN 值數
downcast 字典。指定轉換的資料型別

返回值

如果 inplaceTrue,則用給定的 value 替換所有 NaN 值的 DataFrame;否則為 None

示例程式碼:用 DataFrame.fillna() 方法填充所有 DataFrame 中的 NaN

import pandas as pd
import numpy as np

df = pd.DataFrame({'X': [1, 2, 3, np.nan, 3],
                   'Y': [4, np.nan, 8, np.nan, 3]})
print("DataFrame:")
print(df)

filled_df = df.fillna(5)

print("Filled DataFrame:")
print(filled_df)

輸出:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  3.0  8.0
3  NaN  NaN
4  3.0  3.0
Filled DataFrame:
     X    Y
0  1.0  4.0
1  2.0  5.0
2  3.0  8.0
3  5.0  5.0
4  3.0  3.0

它用 pandas.DataFrame.fillna() 方法中作為引數提供的 5 填充 DataFrame 中的所有 NaN 值。

DataFrame.fillna() 中的平均數

我們可以用一列的平均值來代替該列的 NaN 值。

import pandas as pd
import numpy as np

df = pd.DataFrame({'X': [1, 2, 3, np.nan, 3],
                   'Y': [4, np.nan, 8, np.nan, 3]})
print("DataFrame:")
print(df)

df.fillna(df.mean(),inplace=True)

print("Filled DataFrame:")
print(df)

輸出:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  3.0  8.0
3  NaN  NaN
4  3.0  3.0
Filled DataFrame:
      X    Y
0  1.00  4.0
1  2.00  5.0
2  3.00  8.0
3  2.25  5.0
4  3.00  3.0

它將 X 列的 NaN 值用 X 列的平均值填充,Y 列的 NaN 值用 Y 列的平均值填充。

由於 inplace=True,呼叫 fillna() 函式後,原 DataFrame 被修改。

DataFrame.fillna() 用 0 來填充

import pandas as pd
import numpy as np

df = pd.DataFrame({'X': [1, 2, 3, np.nan, 3],
                   'Y': [4, np.nan, 8, np.nan, 3]})
print("DataFrame:")
print(df)

df.fillna(0,inplace=True)

print("Filled DataFrame:")
print(df)

輸出:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  3.0  8.0
3  NaN  NaN
4  3.0  3.0
Filled DataFrame:
     X    Y
0  1.0  4.0
1  2.0  0.0
2  3.0  8.0
3  0.0  0.0
4  3.0  3.0

它用 0 填充所有 NaN

示例程式碼:DataFrame.fillna() 方法,引數為 method

我們也可以使用不同的 “方法 “引數在 DataFrame 中填充 NaN 值。

import pandas as pd
import numpy as np

df = pd.DataFrame({'X': [1, 2, 3, np.nan, 3],
                   'Y': [4, np.nan, 8, np.nan, 3]})
print("DataFrame:")
print(df)

filled_df = df.fillna(method="backfill")

print("Filled DataFrame:")
print(filled_df)

輸出:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  3.0  8.0
3  NaN  NaN
4  3.0  3.0
Filled DataFrame:
     X    Y
0  1.0  4.0
1  2.0  8.0
2  3.0  8.0
3  3.0  3.0
4  3.0  3.0

設定 method="backfill" 將所有的 DataFrame 中的 NaN 值填充到同一列的 NaN 值之後。

我們也可以使用 bfillpadffill 方法來填充 DataFrame 中的 NaN 值。

method 方法 說明
backfill/bfill 用同一列中的 NaN 值之後的值填充 DataFrame 中所有的 NaN
ffill/pad 用同一列中的 NaN 值之前的值填充 DataFrame 中所有的 NaN

示例程式碼:DataFrame.fillna() 方法的 limit 引數

DataFrame.fillna() 方法中的 limit 引數限制了該方法所要填充的連續 NaN 值的最大數量。

import pandas as pd
import numpy as np

df = pd.DataFrame({'X': [1, 2,np.nan, 3,3],
                   'Y': [4, np.nan, 8, np.nan, 3]})
print("DataFrame:")
print(df)

filled_df = df.fillna(3,limit=1)

print("Filled DataFrame:")
print(filled_df)

輸出:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  NaN  8.0
3  3.0  NaN
4  3.0  3.0
Filled DataFrame:
     X    Y
0  1.0  4.0
1  2.0  3.0
2  3.0  8.0
3  3.0  NaN
4  3.0  3.0

在這裡,一旦一列中的 NaN 值被填滿,同一列中的其他 NaN 值將保持原樣。

Author: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

相關文章 - Pandas DataFrame