Pandas pd.isna() 関数

Python math 模块Pandas よく使う関数


pd.isna()は、Pandas で最もよく使われる欠損値検出関数です。各要素が欠損値かどうかをチェックし、ブール値(True 或 False)構造。

データ分析において、欠損値の処理は非常に重要な最初のステップです。pd.isna()は、データ内の欠損位置をすばやく特定し、その後の穴埋め、削除、その他の処理操作の根拠を提供するのに役立ちます。


基本構文とパラメータ

構文形式

pandas.isna(obj)

パラメータの説明

パラメータ型説明
objDataFrame、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)

実行結果:

原始 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

コードの説明:

  1. np.nanとNoneはすべて欠損値として認識されます
  2. 返されたブール 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)

実行結果:

原始 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), "%")

実行結果:

每列缺失值数量:
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)

実行結果:

包含缺失值的行:
   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、それらは欠損値ではないためです。


Python math 模块Pandas よく使う関数

その他の拡張