1. 在 Python 中判斷 NaN 的方法
什麼是 NaN?
NaN(Not a Number)是一種特殊的浮點數值,用來表示無效或未定義的數學運算結果。典型的例子包括除以零或其他無效的運算。在進行資料分析或數值處理時,必須特別留意 NaN 的存在。如果未正確處理 NaN,可能導致計算結果不正確,甚至程式無法如預期執行。
為什麼 NaN 判斷很重要?
如果資料集中含有 NaN,可能會影響資料的可信度或最終的運算結果。因此,首先判斷是否存在 NaN,並根據需求進行後續處理(如刪除、替換等)是非常重要的步驟。
2. 如何在 Python 中產生 NaN
在 Python 中,可以使用 float('nan')
來產生 NaN。這常用於明確表示數值運算中的無效結果。
num = float('nan')
print(num) # 結果: nan
與 None 的差異
NaN 表示數值上的無效,而 None
則表示「沒有任何值」的狀態。None
可以使用 ==
來進行比較,但 NaN 即使與自身比較,也會回傳 False,因此使用 ==
來判斷 NaN 是不正確的。
num = float('nan')
print(num == num) # 結果: False
none_value = None
print(none_value == None) # 結果: True

3. 判斷 NaN 的方法
3.1. 使用標準函式庫判斷(math.isnan()
)
若要使用 Python 的標準函式庫來判斷 NaN,可以使用 math.isnan()
。此函式會在給定的值為 NaN 時回傳 True
。
import math
num = float('nan')
print(math.isnan(num)) # 結果: True
3.2. 使用 NumPy 判斷(numpy.isnan()
)
NumPy 是一個專門處理陣列與矩陣運算的函式庫,提供 numpy.isnan()
函式來高效判斷陣列中是否存在 NaN。在數值分析與科學資料處理中經常使用。
import numpy as np
num_list = [1, 2, np.nan, 4]
print(np.isnan(num_list)) # 結果: [False False True False]
3.3. 使用 pandas 判斷(pandas.isna()
)
當處理資料框(DataFrame)時,可使用 pandas 的 isna()
或 isnull()
來判斷是否有 NaN。這些函式在資料清理與處理缺失值時非常有用。
import pandas as pd
import numpy as np
data = pd.Series([1, 2, np.nan, 4])
print(pd.isna(data)) # 結果: 0 False
# 1 False
# 2 True
# 3 False
4. 刪除或替換 NaN 的方法
4.1. 從列表中刪除 NaN
若要從列表中刪除 NaN,可以結合 math.isnan()
與列表推導式來實現。
import math
num_list = [1, 2, float('nan'), 4]
clean_list = [num for num in num_list if not math.isnan(num)]
print(clean_list) # 結果: [1, 2, 4]
4.2. 使用 pandas 刪除 NaN(dropna()
)
若要從 DataFrame 中刪除 NaN,可以使用 dropna()
方法。此方法會移除包含 NaN 的列或欄位。
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, 6]})
clean_df = df.dropna()
print(clean_df)
4.3. 使用 pandas 替換 NaN(fillna()
)
如果不想刪除 NaN,而是用特定的值來取代,可以使用 fillna()
方法。
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, 6]})
df.fillna(0, inplace=True)
print(df)

5. 含有 NaN 的計算
若計算中包含 NaN,則最終結果也會是 NaN。因此,若想獲得正確結果,必須事先移除或替換 NaN。
import numpy as np
result = 10 + np.nan
print(result) # 結果: nan
包含 NaN 的統計計算範例
當對包含 NaN 的資料集進行統計運算時,若希望忽略 NaN 來進行計算,可以使用 NumPy 的 nanmean()
函式。此函式會排除 NaN 後計算平均值。
import numpy as np
data = [1, 2, np.nan, 4]
mean = np.nanmean(data) # 忽略 NaN 進行平均值計算
print(mean) # 結果: 2.3333...
6. 判斷 NaN 時的注意事項
6.1. 比較運算子的行為
NaN 有一個特殊性質:無論與其他數值或與自己比較,結果都會是不相等。因此,不能使用 ==
或 !=
來判斷 NaN,必須使用專用的函式,如 isnan()
或 isna()
。
num = float('nan')
print(num == num) # 結果: False
6.2. 資料清理時的重點
在進行資料分析時,如果資料中殘留 NaN,將無法進行正確的計算。這可能會扭曲分析結果,因此在處理前必須進行妥善的清理。透過適當地移除或替換 NaN,可以提升資料的準確性與可信度。
7. 總結
在 Python 中,我們可以透過 math
、numpy
、pandas
等工具,有效率地判斷與處理 NaN。了解如何正確處理 NaN,是進行資料分析與數值計算時不可或缺的基本知識,這項技能對各種程式開發領域都非常實用。