データ分析をしていると、欠損値(NaN: Not a Number)に出くわすことってよくありますよね。
データが揃っていないと、せっかくの分析結果が台無しになってしまうこともあります。
この記事では、PandasでのNaNの検出方法と、それに対する対処法を解説していきます。
欠損値(NaN)の検出方法
まず、データに欠損値があるかどうかを確認したいですよね。Pandasには、欠損値を検出するための便利なメソッドがたくさん用意されています。
isnull メソッド
isnullメソッドは、データフレーム内の欠損値を見つけてくれる頼もしいメソッドです。このメソッドを使うと、欠損値がある場所がTrue、そうでない場所がFalseとして返ってきます。
1 2 3 4 5 |
# サンプルデータの作成 import pandas as pd data = {'A': [1, 2, None, 4, 5],'B': [5, None, None, 8, 10]} df = pd.DataFrame(data) df |

欠損値の検出
1 2 |
missing_values = df.isnull() missing_values |

こんなふうに、どこに欠損値があるか一目でわかりますね!
欠損値がない場所の検出:notnull メソッド
逆に、notnullメソッドを使うと、欠損値がない場所がTrue、欠損値がある場所がFalseになります。こちらも便利です。
1 2 |
not_missing_values = df.notnull() not_missing_values |

このようにして、データのどこに情報がちゃんと入っているか確認できますね。
欠損値のカウント
「どの列にどれくらい欠損値があるんだろう?」って気になりますよね。そんなときは、isnullとsumメソッドを組み合わせると、各列の欠損値の数がわかります。
各列の欠損値のカウント
1 2 |
missing_count = df.isnull().sum() missing_count |

これでどの列に欠損値が多いか一目瞭然ですね!
欠損値への対処方法
欠損値が見つかったら、次はそれをどうするか考えなきゃいけませんね。Pandasでは、欠損値を削除したり、別の値で置き換えたりする方法がいろいろとあります。ここでは、その代表的な方法をいくつかご紹介します!
欠損値を含む行を削除
まずは、欠損値をまるごと削除する方法です。dropnaメソッドを使うと、欠損値を含む行や列をきれいに削除できます。
1 2 |
df_dropped = df.dropna() df_dropped |

このように、欠損値を含む行が削除されて、データがスッキリしましたね!列を削除したい場合は、axis=1を指定すればOKです。
欠損値を含む列を削除
1 2 |
df_dropped_columns = df.dropna(axis=1) df_dropped_columns |

これで列もスッキリです!
「欠損値を削除したくない!」というときは、fillnaメソッドで別の値に置き換えるのがいいですね。たとえば、ゼロに置き換える場合はこんな感じです。
欠損値をゼロで置き換え
1 2 |
df_filled = df.fillna(0) df_filled |

これで欠損値がゼロになりましたね!もちろん、ゼロ以外の値でも置き換えられますよ。
列ごとに異なる方法で欠損値を置き換え
特定の列ごとに違う方法で欠損値を埋めたいこともありますよね。たとえば、ある列は平均値で、別の列は特定の値で埋めたいときはこうします。
1 2 |
df_filled_custom = df.fillna({'A': df['A'].mean(), 'B': 99}) df_filled_custom |

これで、A列は平均値、B列は固定値99で欠損値が埋められましたね。自由度が高いので便利です!
欠損値の前後のデータで補完
前後のデータを使って欠損値を補完する方法もあります。これには、fillnaメソッドでmethodパラメータを設定します。
• ffill(前方補完): 欠損値を直前の値で埋めます。
• bfill(後方補完): 欠損値を直後の値で埋めます。
1 2 3 4 5 6 |
# 前方補完 df_ffill = df.fillna(method='ffill') # 後方補完 df_bfill = df.fillna(method='bfill') print(df_ffill) print(df_bfill) |

これで、前後のデータを活用して欠損値を埋めることができました!時系列データには特に有効ですよね。
適切な欠損値処理ができれば、データ分析の精度もグッと上がります。データの特性をよく理解して、ベストな方法を選びましょうね!
まとめ
欠損値はデータ分析をする上で避けて通れないものですが、Pandasを使えば怖くありません!
isnullやnotnullで欠損値を見つけ、dropnaやfillnaで適切に対処すれば、データセットはクリーンに保てます。
データの特性や分析の目的に応じて、欠損値に対処するスキルを高めていきましょう。
======================================================
さらにデータサイエンスを学んでいきたいという方向けに「Pythonによるデータサイエンス」動画を提供しています。
基礎編・応用編それぞれ35時間以上の動画となっており、今なら50%OFFですので、ぜひチェックしてみてください!
>>>Pythonによるデータサイエンス基礎編
>>>Pythonによるデータサイエンス応用編