Python
 Computer >> コンピューター >  >> プログラミング >> Python

fillnaやinterpolateを使わずにデータフレームからNaN値を削除する方法【Python Matplotlib】

データ分析の現場では、欠損値(NaN)を含むデータフレームをそのままグラフ化すると、線が途切れたり空白が生じたりして、正確な可視化の妨げになります。この記事では、fillna()interpolate()に頼らずにNaN値を除外する基本手法と、比較として補間を活用して滑らかな折れ線グラフを描く方法を、Matplotlibを使ったサンプルコードとともに解説します。

全体の流れ

  • 図のサイズを設定し、サブプロット周辺の余白(パディング)を調整します。
  • NumPy配列を作成し、それをもとにPandasのデータ構造を生成します。
  • 軸ラベルを持つ1次元のndarray(時系列データも扱えます)としてSeriesオブジェクトを用意します。
  • 補間しながらプロットします。メソッドに'index''values'を指定すると、インデックスの実際の数値が補間の基準として使われます。
  • show()メソッドで図を表示します。

fillna・interpolateを使わずにNaNを除外する:dropna()

欠損値を単純に取り除きたいだけであれば、Pandasのdropna()が最も手軽な方法です。欠損値を特定の値で埋めるfillna()や、欠損値を補間するinterpolate()を使わずに、NaNが含まれる要素をまとめて削除できます。

# NaNを含む行を削除した新しいSeriesを作成
df_clean = df.dropna()

# 欠損値のないデータをプロット
df_clean.plot(marker='o')
plt.show()

この方法ではデータ点が減るため、なるべく多くのデータを残したいケースには不向きですが、欠損値を含むレコードを分析対象から除外したい場合には最適です。

参考:interpolate('index')で補間しながらプロットする

一方、データ点を減らさずに見た目上の切れ目を埋めたい場合は、interpolate('index')が便利です。インデックスの実際の数値を基準に欠損部分が補間されるため、グラフ上の線が途切れません。以下が完全なサンプルコードです。

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

# 図のサイズを設定
plt.rcParams['figure.figsize'] = [7.50, 3.50]
plt.rcParams['figure.autolayout'] = True

# NaNを含むNumPy配列
data = np.array([1., 1.2, 0.89, np.nan,
    1.2, np.nan, 1.89, 2.09,
    .78, .67, np.nan, 1.78,
    np.nan, 1.56, 1.89, 2.78]
    )

# PandasのSeriesを作成
df = pd.Series(data)

# インデックスの値を基準に補間してプロット
df.interpolate('index').plot(marker='o')

# グラフを表示
plt.show()

実行結果

このコードを実行すると、次のようなグラフが出力されます。元々NaNだった箇所がインデックスの数値に基づいて補間され、マーカー付きの折れ線が途切れずにつながっているのが確認できます。

fillnaやinterpolateを使わずにデータフレームからNaN値を削除する方法【Python Matplotlib】


  1. 【Python】Matplotlibで目盛りラベルを残したままグラフのフレーム(枠線)を削除する方法

    Matplotlibで作成したグラフから、軸の目盛りラベルはそのまま残しつつ、外枠(フレーム)だけを取り除きたいケースはよくあります。例えば、よりシンプルで洗練された見た目のチャートを作りたい場合などに有効です。 ここでは、具体的な手順とサンプルコードを紹介します。 実装手順 figureサイズの設定 — グラフのサイズを指定し、figure.autolayout を有効にしてサブプロット間および周囲の余白を自動調整します。 データの準備 — プロット用の y データポイントのリストを作成します。 グラフの描画 — plot() メソッドを使ってyデータポイントをプロットします。 スパイン(

  2. Python Matplotlibで画像からグリッド線(グリッド)を非表示にする方法

    Matplotlibで画像を表示する際、デフォルトでは背景にグリッド線が表示されることがあります。画像をクリアに見せるためにグリッド線を削除したい場合は、grid(False) を使うだけで簡単に実現できます。以下に具体的な手順とサンプルコードを紹介します。グリッド線を削除する手順図のサイズ(figure size)を設定し、サブプロット間および周囲の余白(パディング)を調整します。ファイルから画像を読み込みます。OpenCVなどを使って、画像のカラースペースを変換します(例:BGRからRGBへ)。グリッド線を非表示にするために plt.grid(False) を呼び出します。imshow()