如何在 Pandas DataFrame 的列中將所有 NaN 值替換為零
Ahmed Waheed
2023年1月30日
當我們處理大型資料集時,有時資料集中會有 NaN
值要用某個平均值或合適的值替換。例如,你有一個學生評分列表,有些學生沒有參加測驗,因此係統自動輸入了 NaN
而不是 0.0。下面列出了完成此任務的不同方法。
在以下各節中,我們將使用相同的 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)
以下是等級為 NaN
的 DataFrame
。
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
替換為 0
。df.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