Pandas pd.isna() 関数
pd.isna()は、Pandas で最もよく使われる欠損値検出関数です。各要素が欠損値かどうかをチェックし、ブール値(True 或 False)構造。
データ分析において、欠損値の処理は非常に重要な最初のステップです。pd.isna()は、データ内の欠損位置をすばやく特定し、その後の穴埋め、削除、その他の処理操作の根拠を提供するのに役立ちます。
基本構文とパラメータ
構文形式
pandas.isna(obj)
パラメータの説明
| パラメータ | 型 | 説明 |
|---|---|---|
| obj | DataFrame、Series、scalar、list、tuple | 欠損値をチェックする対象オブジェクト。対応する任意のデータ型を指定できます。 |
戻り値の説明
- 入力と同じ構造のブール値オブジェクトを返します:
- 入力が DataFrame の場合、ブール値の DataFrame を返します
- 入力が Series の場合、ブール値の Series を返します
- 入力が単一の値の場合、ブール値のスカラーを返します
例
簡単なものから複雑なものまでの一連の例を通して、pd.isna()の使い方を徹底的にマスターしましょう。
例1: Series の欠損値を検出する
例
import pandas as pd
import numpy as np
# 欠損値を含む Series を作成
s = pd.Series([1, 2, np.nan, 4, None, 6])
# 欠損値を検出
result = pd.isna(s)
print("元の Series:")
print(s)
print("\n"検出結果:")
print(result)
import numpy as np
# 欠損値を含む Series を作成
s = pd.Series([1, 2, np.nan, 4, None, 6])
# 欠損値を検出
result = pd.isna(s)
print("元の Series:")
print(s)
print("\n"検出結果:")
print(result)
実行結果:
原始 Series: 0 1.0 1 2.0 2 NaN 3 4.0 4 NaN 5 6.0 dtype: float64 检测结果: 0 False 1 False 2 True 3 False 4 True 5 False dtype: bool
コードの説明:
np.nanとNoneはすべて欠損値として認識されます- 返されたブール Series では、欠損値の位置は
True、非欠損値の位置はFalse
例2: DataFrame の欠損値を検出する
例
import pandas as pd
import numpy as np
# 欠損値を含む DataFrame を作成
df = pd.DataFrame({
'A': [1, 2, np.nan, 4],
'B': ['a', None, 'c', 'd'],
'C': [pd.NaT, 6, 7, 8] # NaT は時間型の欠損値です
})
# 欠損値を検出
result = pd.isna(df)
print("元の DataFrame:")
print(df)
print("\n"検出結果:")
print(result)
import numpy as np
# 欠損値を含む DataFrame を作成
df = pd.DataFrame({
'A': [1, 2, np.nan, 4],
'B': ['a', None, 'c', 'd'],
'C': [pd.NaT, 6, 7, 8] # NaT は時間型の欠損値です
})
# 欠損値を検出
result = pd.isna(df)
print("元の DataFrame:")
print(df)
print("\n"検出結果:")
print(result)
実行結果:
原始 DataFrame:
A B C
0 1.0 a None
1 2.0 None 6
2 NaN c 7
3 4.0 d 8
dtype: object
检测结果:
A B C
0 False False True
1 False True False
2 True False False
3 False False False
コードの説明:
pd.NaT(Not a Time)は時間型の欠損値で、同様に正しく認識されます。- DataFrame の各位置に対応するブール値が返されます。
例3: 欠損値の数を集計する
実際のデータ分析では、欠損値がいくつあるかを知る必要がよくあります。
例
import pandas as pd
import numpy as np
# データを作成
df = pd.DataFrame({
'A': [1, np.nan, 3, np.nan, 5],
'B': [np.nan, 2, np.nan, 4, np.nan],
'C': [1, 2, 3, 4, 5]
})
# 各列の欠損値の数を集計
print("各列の欠損値の数:")
print(pd.isna(df).sum())
print("\n"総欠損値数:", pd.isna(df).sum().sum())
# 欠損値の割合を計算
print("\n"欠損値の割合:")
print((pd.isna(df).sum() / len(df) * 100).round(2), "%")
import numpy as np
# データを作成
df = pd.DataFrame({
'A': [1, np.nan, 3, np.nan, 5],
'B': [np.nan, 2, np.nan, 4, np.nan],
'C': [1, 2, 3, 4, 5]
})
# 各列の欠損値の数を集計
print("各列の欠損値の数:")
print(pd.isna(df).sum())
print("\n"総欠損値数:", pd.isna(df).sum().sum())
# 欠損値の割合を計算
print("\n"欠損値の割合:")
print((pd.isna(df).sum() / len(df) * 100).round(2), "%")
実行結果:
每列缺失值数量: A 2 B 3 C 0 dtype: int64 总缺失值数量: 5 缺失值比例: A 40.0 B 60.0 C 0.0 %
例4: 他の関数と組み合わせて使用する
例
import pandas as pd
import numpy as np
# データを作成
df = pd.DataFrame({
'name': ['Alice', 'Bob', None, 'Diana', 'Eve'],
'age': [25, None, 35, 28, None],
'score': [85, 90, 78, 92, 88]
})
# isna を使用して欠損値を含む行を抽出
rows_with_na = df[pd.isna(df).any(axis=1)]
print("欠損値を含む行:")
print(rows_with_na)
# isna を使用して欠損値を埋める
df_filled = df.fillna({
'name': 'Unknown',
'age': df['age'].mean(), # 平均値で年齢を埋める
'score': 0
})
print("\n"穴埋め後の DataFrame:")
print(df_filled)
import numpy as np
# データを作成
df = pd.DataFrame({
'name': ['Alice', 'Bob', None, 'Diana', 'Eve'],
'age': [25, None, 35, 28, None],
'score': [85, 90, 78, 92, 88]
})
# isna を使用して欠損値を含む行を抽出
rows_with_na = df[pd.isna(df).any(axis=1)]
print("欠損値を含む行:")
print(rows_with_na)
# isna を使用して欠損値を埋める
df_filled = df.fillna({
'name': 'Unknown',
'age': df['age'].mean(), # 平均値で年齢を埋める
'score': 0
})
print("\n"穴埋め後の DataFrame:")
print(df_filled)
実行結果:
包含缺失值的行:
name age score
0 Alice 25.0 85
2 None 35.0 78
3 Diana 28.0 92
填充后的 DataFrame:
name age score
0 Alice 25.0 85
1 Bob 29.0 90
2 Unknown 35.0 78
3 Diana 28.0 92
4 Eve 0.0 88
注意事項
重要な注意:
pd.isna()は以下の値を欠損値として認識します:
np.nan- 数値型の欠損値None- Python 標準の None オブジェクトpd.NaT- 時間型(datetime)の欠損値
空文字列の場合、"" 或 0,pd.isna()False を返しますFalse、それらは欠損値ではないためです。
その他の拡張
Pandas よく使う関数