如何檢查 NaN 是否存在於 Pandas DataFrame 中
NaN
代表不是數字 - Not a Number
,表示 Pandas 中缺少的值。要在 Python Pandas 中檢測 NaN 值,我們可以對 DataFrame 物件使用 isnull()
和 isna()
方法。
pandas.DataFrame.isnull()方法
我們可以使用 pandas.DataFrame.isnull()
來檢查 DataFrame 中的 NaN 值。如果要檢查的 DataFrame
中相應的元素具有 NaN 值,則該方法返回布林值的 DataFrame 元素為 True
,否則為 False
。
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
"Height": [1.63, 1.5, np.nan, np.nan, 1.4],
"Weight": [np.nan, 56, 73, np.nan, 44],
}
)
df_check = df.isnull()
print(df_check)
輸出:
Student Height Weight
0 False False True
1 False False False
2 False True False
3 False True True
4 False False False
在這裡,輸出中的 False
值代表 DataFrame df
中的元素不是 NaN
,True
值代表 DataFrame df
中的 NaN
元素。
如果我們想知道 DataFrame 中是否有 NaN 值,可以使用 isnull().values.any()
方法,如果 DataFrame 中有任何 NaN 值則返回 True;如果 DataFrame 中甚至沒有單個 NaN 元素,則為 False。
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
"Height": [1.63, 1.5, np.nan, np.nan, 1.4],
"Weight": [np.nan, 56, 73, np.nan, 44],
}
)
check_for_nan = df.isnull().values.any()
print(check_for_nan)
輸出:
True
df.isnull().values
返回 DataFrame 的 NumPy 表示形式。如果任何元素被評估為 True,那麼 numpy.any()
返回 True。
因此,如果 DataFrame 中存在任何 NaN
,則 df.isnull().values.any()
為 True
。
df.isnull().any().any()
檢查是否存在任何 NaN
df.any()
返回任何元素是否為 True。當 df
是一個 DataFrame 時,它返回一個 pd.Series
;而當 df
是 pd.Series
時,它返回一個布林值。
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
"Height": [1.63, 1.5, np.nan, np.nan, 1.4],
"Weight": [np.nan, 56, 73, np.nan, 44],
}
)
check_for_nan = df.isnull().any().any()
print(check_for_nan)
輸出:
True
如果 DataFrame 中的任何元素為 NaN
,則上例中的 isnull()
之後的兩個級聯的 any()
方法將返回 True
。
isnull().sum().sum()
檢查是否存在 NaN
如果我們想計算特定 DataFrame 中 NaN 值的總數,那麼 df.isnull().sum().sum()
方法是正確的解決方案。該方法在整個 DataFrame 中返回 NaN
值的總數。
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
"Height": [1.63, 1.5, np.nan, np.nan, 1.4],
"Weight": [np.nan, 56, 73, np.nan, 44],
}
)
total_nan_values = df.isnull().sum().sum()
print(total_nan_values)
輸出:
4
如果結果大於 0,則表示 DataFrame 中存在 NaN
。
pandas.DataFrame.isna()
方法
pandas.DataFrame.isna()
方法類似於
pandas.DataFrame.isnull()。兩種方法的工作之間沒有任何區別。它們只是名稱不同。
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"Student": ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry"],
"Height": [1.63, 1.5, np.nan, np.nan, 1.4],
"Weight": [np.nan, 56, 73, np.nan, 44],
}
)
df_check = df.isna()
check_for_any_nan = df.isna().values.any()
# Or
check_for_any_nan = df.isna().any().any()
total_nan_values = df.isna().sum().sum()
print(df_check)
print("NaN Presence:" + str(check_for_any_nan))
print("Total Number of NaN values:" + str(total_nan_values))
輸出:
Student Height Weight
0 False False True
1 False False False
2 False True False
3 False True True
4 False False False
NaN Presence:True
Total Number of NaN values:4
在這裡,方法 df.isna()
返回的 DataFrame 的元素包含布林值,這些布林值表示在 df 中存在 NaN 值。類似地,df.isna().values.any()
,df.isna().any().any()
和 df.isna().sum().sum()
返回存在的整個 df 中的 NaN 值和 df 中的 NaN 元素數。
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn