Pandas Where: Pandas の力を活用して Null 値を扱う
Updated on
データを扱うことは、私たちの作業の中心的な部分です。しかし生データは、しばしば散らかっていて、不完全で、多くの null 値を含んでおり、それらに対処する必要があります。適切に処理しないと、null 値はデータ分析や機械学習タスクを行う際に問題を引き起こします。幸いなことに、Python の Pandas ライブラリを使えば、データ中の null 値を素早く効果的に管理できます。
この記事では、Pandas の where() 関数と、Pandas における null 値処理のためのさまざまなテクニックを解説します。Pandas DataFrame で欠損データを特定・処理する方法、null 値を扱うための戦略、欠損値を管理する際のベストプラクティスなどを順に見ていきます。
where() と mask() をいつ使うか
where() は条件を満たす値を保持し、それ以外を置き換えます。一方 mask() はその逆を行います。どちらも pandas 2.x では pandas の nullable なセマンティクス(pd.NA)に従います。
import pandas as pd
s = pd.Series([10, None, 30, 40], dtype="Int64")
keep_under_35 = s.where(s < 35) # 40 becomes <NA>
mask_nulls = s.mask(s.isna(), 0) # fill nulls without touching valid rows有効な要素を残し、それ以外を null にしたい場合は where() を使い、デフォルト値が必要なときは fillna と組み合わせます。
Python でデータ可視化を素早く行いたいですか?
PyGWalker は、Jupyter Notebook ベースの環境内で、データ分析と可視化のワークフローを高速化できるオープンソースの Python プロジェクトです。
PyGWalker (opens in a new tab) は、Pandas Dataframe(または Polars Dataframe)を ビジュアル な UI に変換し、変数をドラッグ&ドロップするだけで簡単にグラフを作成できます。以下のコードを使うだけです:
pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)すぐに PyGWalker を試せるオンラインノートブックはこちら:
そして、GitHub で ⭐️ を付けていただけると嬉しいです!
Pandas DataFrame における欠損データの特定と処理
データを扱う際に最もよく行う作業の 1 つは、欠損データの有無を確認することです。Pandas には、isnull() や notnull() など、null 値を特定するためのいくつかの方法が用意されています。これらは、DataFrame 内の値が null であるかどうかを示す真偽値を返します。これらの関数を使うことで、データに欠損値が存在するかどうかを素早く確認できます。
たとえば、いくつかの列を持つ DataFrame があり、その一部に欠損値が含まれているとします。
import pandas as pd
import numpy as np
data = {'name': ['Alice', 'Bob', 'Charlie'],
'age': [25, np.nan, 30],
'gender': ['F', 'M', 'M'],
'income': [50000, 60000, np.nan]}
df = pd.DataFrame(data)DataFrame 内の欠損値を確認するには、isnull() 関数を DataFrame 全体に適用します。
print(df.isnull())これは元の DataFrame と同じ形状の DataFrame を返し、True は null 値、False は非 null 値を表します。
各列ごとの欠損値の数を数えるには、isnull() を適用したあとに sum() メソッドを使います。
print(df.isnull().sum())これは、インデックスが列名、値が各列の欠損値の数である Series オブジェクトを返します。
また、dropna() メソッドを使って、null 値を含む行または列を削除することもできます。このメソッドは、少なくとも 1 つの null 値を含む行または列を削除します。
df.dropna()別の方法として、fillna() 関数を使って、null 値を特定の値で置き換えることもできます。
df.fillna(0)これらは、Pandas で null 値を特定・処理するために利用できるメソッドのごく一部に過ぎません。包括的な一覧については、Pandas のドキュメントを参照してください。
Pandas における Null 値の扱い方
データ分析や機械学習タスクを行う際、null 値はしばしば厄介な存在になります。しかし、null 値に効果的に対処するための戦略はいくつも存在します。ここでは、その一部を紹介します。
補間(Interpolation)
欠損データに対処する一般的なテクニックの 1 つが、補間です。補間とは、近傍の行の観測値に基づいて欠損値を推定する統計的手法です。Pandas では、interpolate() メソッドを使って DataFrame に対して補間を行うことができます。
df.interpolate()欠損値の埋め込み(Filling Missing Values)
null 値を扱う別の戦略は、定数または残りのデータから計算した値で欠損値を埋めることです。fillna() メソッドを使うことで、null 値を特定の値で埋めることができます。
df.fillna(0)また、残りのデータの平均値、最頻値(mode)、中央値(median)などで null 値を埋めることもできます。
df.fillna(df.mean())欠損値の削除(Dropping Missing Values)
欠損値の削除は、null 値に対処する際によく用いられる戦略です。dropna() メソッドを使うことで、1 つ以上の null 値を含むすべての行を削除できます。
df.dropna()null 値を含む列を削除することもできます。
df.dropna(axis=1)インピュテーション(Imputation)
インピュテーションとは、観測されたデータに基づいて欠損値を推定する手法です。Pandas と組み合わせて、scikit-learn パッケージを使ってインピュテーションを実行できます。
from sklearn.impute import SimpleImputer
imp = SimpleImputer(missing_values=np.nan, strategy='mean')
df[['age', 'income']] = imp.fit_transform(df[['age', 'income']])これらは、Pandas で null 値を扱う際に利用できる多くの戦略のうちの一部に過ぎません。どの戦略が適切かは、具体的な課題や欠損データの性質によって異なります。
Pandas で欠損値を管理するためのベストプラクティス
欠損データの扱いは難しいこともありますが、いくつかのベストプラクティスを押さえておくと役に立ちます。Pandas で null 値を管理する際のヒントを挙げます。
- 分析を行う前に、必ず欠損データの有無を確認する。
- 記述統計量を用いてデータの分布を把握し、外れ値を特定する。
- 補間、インピュテーション、欠損値の削除など、欠損データに対処する異なる戦略を検討する。
- それぞれの戦略が持つ潜在的な影響と、分析結果にどのような影響を与えるかを理解しておく。
- データの性質や分布を理解するために、データ可視化ツールを活用する。
- 欠損値の状況と、それにどのように対処したかを分析の中で文書化しておく。
これらのベストプラクティスに従うことで、データ中の null 値をより適切に管理し、データ分析や機械学習タスクを効果的に実行できるようになります。
まとめ
データを扱う際、null 値は悩みの種になりがちですが、Pandas を使えば、欠損データを特定・処理するための強力なツール群を利用できます。この記事では、Pandas の where() 関数をはじめ、Pandas における null 値処理のためのさまざまなテクニックや戦略を紹介しました。これらの手法を適切に用い、ベストプラクティスに従うことで、データ中の null 値をうまく管理し、効果的なデータ分析や機械学習タスクを行えるようになります。


