Pandas pd.notna() 関数

Pandas 通用函数Pandas よく使う関数


pd.notna()Pandasライブラリにおいて、欠損値を検出するための関数です。入力オブジェクトの各要素をチェックし、非欠損値かどうかを判定して、ブール値(True/False)で構成される結果を返します。

これはデータクリーニングで最もよく使われる関数の一つで、データ内の有効な値を素早く識別し、その後のデータ処理や分析に備えることができます。

単語の意味: not「not」は否定を表し、na「na」は"not available"(利用不可)の略で、合わせると「欠損値ではない」という意味になります。


基本構文とパラメータ

pd.notna()Pandasライブラリのトップレベル関数であり、直接pd.notna()呼び出すことも、SeriesまたはDataFrameオブジェクトの.notna()メソッドとして呼び出すこともできます。

構文形式

pd.notna(obj)

パラメータの説明

  • パラメータ: obj
    • 型: Series、DataFrame、リスト、配列、スカラー値など、任意のPythonオブジェクト。
    • 説明: 非欠損値かどうかをチェックするオブジェクト。Pandasにおける欠損値にはNone、NaN、NaT(欠損した時間タイプ)およびpandas.NA。

関数の説明

  • 戻り値: 入力オブジェクトと同じ形状のブール値オブジェクトを返します。SeriesまたはDataFrameの場合は同じ型のオブジェクトを返し、スカラーの場合は単一のブール値を返します。
  • 効果: 非欠損値に対してはTrueを返し、True欠損値に対してはFalseを返します。False。

例

簡単なものから複雑なものまでの一連の例を通して、pd.notna()の使い方を徹底的にマスターしましょう。

例1:基本的な使い方 - スカラーとリスト内の欠損値を検出する

例

import pandas as pd
import numpy as np

# 1. スカラー値が非欠損値かどうかを検出
print("=== スカラー検出 ===")
print(f"pd.notna(10): {pd.notna(10)}")              # 正常な数値 -> True
print(f"pd.notna('サンプル'): {pd.notna('サンプル')}")  # 正常な文字列 -> True
print(f"pd.notna(None): {pd.notna(None)}")          # None -> False
print(f"pd.notna(np.nan): {pd.notna(np.nan)}")      # np.nan -> False

# 2. リスト内の欠損値を検出
print("\n=== リスト検出 ===)
data_list = [1, 2, np.nan, 'サンプル', None, 5]
result = pd.notna(data_list)
print(f"元のリスト: {data_list}")
print(f"検出結果: {result.tolist()}")  # 確認しやすいようにリストに変換

実行結果の予想:

=== 标量检测 ===
pd.notna(10): True
pd.notna('サンプル'): True
pd.notna(None): False
pd.notna(np.nan): False

=== 列表检测 ===
原始列表: [1, 2, nan, 'サンプル', None, 5]
检测结果: [True, False, True, False, True]

コードの解説:

  1. pd.notna(10)とpd.notna('サンプル')正常な数値と文字列を検出すると、Trueを返し、True。
  2. pd.notna(None)とpd.notna(np.nan)PythonとNumPyの欠損値マーカーを検出すると、Falseを返します。False。
  3. リストに対してpd.notna()を使用すると、pd.notna()ブール型のリストが返され、欠損値の位置はFalseになります。False。

例2:Series内の欠損値を検出する

Seriesデータを処理する際、pd.notna()有効なデータを素早く特定できます。

例

import pandas as pd
import numpy as np

# 欠損値を含むSeriesを作成
s = pd.Series([1, 2, np.nan, 4, None, 'サンプル', np.nan])

print("=== 元のSeries ===")
print(s)
print(f"\n型: {type(s)})

# pd.notna() を使用して検出
print("\n=== pd.notna() 検出結果 ===)
result = pd.notna(s)
print(result)

# Seriesのnotna()メソッドを使用(同等の効果)
print("\n=== s.notna() メソッドによる検出 ===)
print(s.notna())

# 非欠損値を抽出
print("\n=== 非欠損値の抽出 ===)
print(s[s.notna()])

実行結果の予想:

=== 原始 Series ===
0       1
1       2
2     NaN
3       4
4    None
5    サンプル
6     NaN
dtype: object

=== pd.notna() 检测结果 ===
0     True
1     True
2    False
3     True
4    False
5     True
6    False
dtype: bool

=== s.notna() 方法检测 ===
0     True
1     True
2    False
3     True
4    False
5     True
6    False
dtype: bool

=== 筛选非缺失值 ===
0       1
1       2
3       4
5    サンプル
dtype: object

コードの解説:

  • pd.notna(s)とs.notna()どちらもSeries内の欠損値を検出し、ブール型Seriesを返します。
  • ブールインデックスを利用すると、s[s.notna()]すべての非欠損値の要素を素早く抽出でき、これはデータクリーニングで非常に実用的です。

例3:DataFrame内の欠損値を検出する

表形式データを処理する際、pd.notna()データの完全性を素早く把握できます。

例

import pandas as pd
import numpy as np

# 欠損値を含むDataFrameを作成
df = pd.DataFrame({
    'name': ['Alice', 'Bob', None, 'Diana'],
    'age': [25, np.nan, 30, 28],
    'score': [85, 90, np.nan, 95]
})

print("=== 元のDataFrame ===")
print(df)

# DataFrame全体を検出
print("\n=== pd.notna() 検出結果 ===)
print(pd.notna(df))

# 列ごとに欠損値の数を検出
print("\n=== 各列の非欠損値の数 ===)
print(df.notna().sum())

# 行ごとに欠損値の数を検出
print("\n=== 各行の非欠損値の数 ===)
print(df.notna().sum(axis=1))

# 欠損値の割合を計算
print("\n=== 欠損値の割合 ===)
missing_ratio = df.isna().mean()
print(missing_ratio)

実行結果の予想:

=== 原始 DataFrame ===
    name  age  score
0  Alice   25   85.0
1    Bob  NaN   90.0
2   None   30    NaN
3  Diana   28   95.0

=== pd.notna() 检测结果 ===
   name    age  score
0  True   True   True
1  True  False   True
2 False   True  False
3  True   True   True

=== 每列非缺失值数量 ===
name     3
age      3
score    3

=== 每行非缺失值数量 ===
0    3
1    2
2    1
3    3

=== 缺失值比例 ===
name     0.25
age      0.25
score    0.25

コードの解説:

  • pd.notna(df)元のDataFrameと同じ形状のブール型DataFrameを返し、各位置が非欠損値かどうかを示します。
  • df.notna().sum()各列の非欠損値の数を集計します。
  • df.isna().mean()各列の欠損値の割合を計算し、データ品質の評価に役立てます。

ヒント: pd.notna()とpd.isna()pd.notna()とpd.isna()は互いに逆の関係にあります。pd.notna()Trueを返す位置では、pd.isna()Falseを返します。逆もまた同様です。

Pandas 常用函数Pandas よく使う関数

その他の拡張