iPAS 備考專區 登入

iPAS AI 應用規劃師 中級 科目二 大數據處理分析與應用・114 年第二次・L22・第 49 題

pandas 偵測 NaN:isnull、isna、isNaN 哪些有效?

原題

參考下圖計算各變數的遺漏值(NaN)個數結果,下列何者正確? (輸出結果:youtube 0 / facebook 1 / newspaper 0 / sales 0 / dtype: int64) 選項 A: df.isnull().sum() 選項 B: df.isNaN().sum() 選項 C: df.isna().sum() 選項 D: df.isnan().sum()

白話

題目顯示計算各欄缺失值個數的輸出結果(facebook 有 1 個 NaN),並列出 4 個 pandas 的方法語法(A 到 D),題目把它們打包成 4 個組合選項,要你從中找出哪些語法能正確得到這個輸出。

問你:哪些語法能正確計算 DataFrame 各欄的缺失值個數?

一句話總結

pandas 計算缺失值的有效語法是 isnull() 和 isna()(兩者完全等價)。isNaN()(大寫 N)和 isnan()(全小寫)都不是 pandas DataFrame 的方法,執行會拋出 AttributeError。正確選項是「選項 A(isnull)和 選項 C(isna)」,對應總選項 C。

情境

先感受問題:四個長得像的方法,只有兩個真的存在

行銷資料分析師小嘉要計算各欄缺失值個數,她查了幾個看起來都合理的方法名稱:

df.isnull().sum() → 能用?

df.isNaN().sum() → 能用?(注意 N 大寫)

df.isna().sum() → 能用?

df.isnan().sum() → 能用?(全小寫)

關鍵是 pandas DataFrame 的 API 只定義了 isnull() 和 isna() 兩個方法,而且兩者是完全等價的別名(alias)。isNaN() 和 isnan() 根本不是 pandas 的方法,執行時會拋出 AttributeError:'DataFrame' object has no attribute 'isNaN'。

舊方法

逐一驗證四個語法是否存在

  1. 選項 A:df.isnull().sum() → 有效。isnull() 是 pandas DataFrame/Series 的標準方法,返回與原資料同形狀的布林矩陣(True 表示缺失)。.sum() 對每欄加總布林值,得到各欄缺失值個數。這是最早期使用的寫法。
  2. 選項 B:df.isNaN().sum() → 無效,報錯。pandas DataFrame 沒有 isNaN()(大寫 N)這個方法。大小寫不一致,AttributeError。注意:numpy 有 np.isnan(),但那是 numpy 的函式(接受 array),不是 pandas DataFrame 的方法,用法不同。
  3. 選項 C:df.isna().sum() → 有效。isna() 是 pandas 1.0 版後加入的別名,功能和 isnull() 完全相同,返回相同的結果。現代 pandas 官方文件推薦用 isna(),語義上更清晰("is not available")。
  4. 選項 D:df.isnan().sum() → 無效,報錯。pandas DataFrame 沒有 isnan()(全小寫 n)這個方法。同樣 AttributeError。全小寫的 isnan 是 Python math 模組的函式(math.isnan(x)),不是 pandas 方法。
  5. 總結:只有 A 和 C 有效,對應正確選項 C(「選項 A、選項 C」)。

新方法

isnull 和 isna 是同一件事,兩個都對

小嘉驗證後確認:

df.isnull().sum() → 輸出:youtube 0, facebook 1, newspaper 0, sales 0 ✓

df.isna().sum() → 輸出:youtube 0, facebook 1, newspaper 0, sales 0 ✓(完全一樣)

df.isNaN().sum() → AttributeError: 'DataFrame' has no attribute 'isNaN' ✗

df.isnan().sum() → AttributeError: 'DataFrame' has no attribute 'isnan' ✗

A 和 C 都能產生題目顯示的輸出,B 和 D 直接報錯。正確的組合是「選項 A 和 選項 C」。這就是總選項 C 講的:選項 A、選項 C。

錯選項

為什麼其他總選項是錯的

A只有選項 D(isnan)

字面在說什麼

只有 df.isnan().sum() 能計算缺失值。

為什麼不對

pandas DataFrame 沒有 isnan() 方法,執行會立刻拋出 AttributeError。全小寫的 isnan 不在 pandas 的 API 中。同時這個選項漏掉了 isnull 和 isna 兩個真正有效的方法。

誰會選錯

記得 numpy 有 np.isnan(),或 Python math 模組有 math.isnan(),誤以為 pandas 也有同名方法。

B選項 B、C、D(isNaN、isna、isnan)

字面在說什麼

isNaN、isna、isnan 這三個都有效。

為什麼不對

isna() 有效,但 isNaN()(大寫 N)和 isnan()(全小寫)都不存在。這個選項包含了兩個不存在的方法,而且漏掉了 isnull()(有效的方法)。

誰會選錯

以為有效的方法是「帶 NaN 字樣的」,而沒有記住 pandas 的方法是 isnull 和 isna(不是 isNaN 或 isnan)。

D選項 A、B、C(isnull、isNaN、isna)

字面在說什麼

isnull、isNaN、isna 三個都有效。

為什麼不對

isnull() 和 isna() 確實有效,但 isNaN()(大寫 N)不存在。如果把 B 也加進來,執行 df.isNaN().sum() 會報 AttributeError,不是正確答案。

誰會選錯

認為有效方法更多的人,沒有嚴格驗證 isNaN 大寫 N 是否真的存在於 pandas API。

變形題

同個考點下次怎麼變形

延伸

想再往下看,這 5 個

答案、題目或解析有問題?回報這題

出處:iPAS 經濟部產業人才能力鑑定 ・ 114 年第二梯次 iPAS AI 應用規劃師 中級 科目二 大數據處理分析與應用 第 49 題

看官方原文 PDF

原題 © 經濟部產業發展署,AITerms.tw 僅作教學解析使用,本站解析以 CC BY-NC-SA 4.0 授權。