如何在 Pandas DataFrame 的列中將所有 NaN 值替換為零

Ahmed Waheed 2023年1月30日
  1. df.fillna() 方法將所有 NaN 值替換為零
  2. df.replace() 方法
如何在 Pandas DataFrame 的列中將所有 NaN 值替換為零

當我們處理大型資料集時,有時資料集中會有 NaN 值要用某個平均值或合適的值替換。例如,你有一個學生評分列表,有些學生沒有參加測驗,因此係統自動輸入了 NaN 而不是 0.0。下面列出了完成此任務的不同方法。

  1. df.fillna()
  2. df.replace()

在以下各節中,我們將使用相同的 DataFrame,如下所示:

import pandas as pd
import numpy as np

data = {
    "name": ["Oliver", "Harry", "George", "Noah"],
    "percentage": [90, 99, 50, 65],
    "grade": [88, np.nan, 95, np.nan],
}
df = pd.DataFrame(data)
print(df)

以下是等級為 NaNDataFrame

     name  percentage  grade
0  Oliver          90   88.0
1   Harry          99    NaN
2  George          50   95.0
3    Noah          65    NaN

df.fillna() 方法將所有 NaN 值替換為零

讓我們藉助 df.fillna() 方法替換 NaN 值。

import pandas as pd
import numpy as np

data = {
    "name": ["Oliver", "Harry", "George", "Noah"],
    "percentage": [90, 99, 50, 65],
    "grade": [88, np.nan, 95, np.nan],
}
df = pd.DataFrame(data)
df = df.fillna(0)
print(df)

以下是將 NaN 替換為 0 的輸出。

     name  percentage  grade
0  Oliver          90   88.0
1   Harry          99    0.0
2  George          50   95.0
3    Noah          65    0.0

df.fillna() 方法用給定值填充 NaN 值。它不會更改物件資料,但預設情況下會返回一個新的 DataFrame,除非將 inplace 引數設定為 True。

我們可以通過設定 inplace 引數為 True 來重寫上述程式碼。

import pandas as pd
import numpy as np

data = {
    "name": ["Oliver", "Harry", "George", "Noah"],
    "percentage": [90, 99, 50, 65],
    "grade": [88, np.nan, 95, np.nan],
}
df = pd.DataFrame(data)
df.fillna(0, inplace=True)
print(df)

df.replace() 方法

此方法與 df.fillna() 相同,將 NaN 替換為 0df.replace() 也可用於替換其他數字。讓我們看一下程式碼。

import pandas as pd
import numpy as np

data = {
    "name": ["Oliver", "Harry", "George", "Noah"],
    "percentage": [90, 99, 50, 65],
    "grade": [88, np.nan, 95, np.nan],
}
df = pd.DataFrame(data)
nan_replaced = df.replace(np.nan, 0)
print(nan_replaced)

以下是輸出。

     name  percentage  grade
0  Oliver          90   88.0
1   Harry          99    0.0
2  George          50   95.0
3    Noah          65    0.0

相關文章 - Pandas NaN