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

【Python Pandas】fillnaで欠損値(NaN)を後方の値で埋める方法(bfill)

はじめに

PandasのDataFrameには、データの読み込みミスや入力漏れなどによって欠損値(NaN)が含まれることがあります。このような欠損値を処理する方法のひとつが、「後ろにある有効な値を前方向きに引き継いで埋める」という後方補完(Backward Fill)です。

本記事では、fillna()メソッドのmethodパラメータに'bfill'を指定して、null以外の値を後方から伝播させる方法を解説します。

bfillの基本的な使い方

後方補完を行うには、fillna()メソッドの引数に以下のように指定します。

fillna(method='bfill')

'bfill'は「backward fill」の略で、各欠損値を直後の行の非null値で置き換えます。

補足: Pandas 2.1以降ではmethod引数は非推奨となっており、代わりに専用メソッドのdf.bfill()を使うことが推奨されています。動作は同じです。

サンプルデータの準備

ここでは、Microsoft Excelで開いた次のようなCSVファイル(一部にNaNを含む売上データ)を使用します。

【Python Pandas】fillnaで欠損値(NaN)を後方の値で埋める方法(bfill)

まず、必要なライブラリをインポートします。

import pandas as pd

続いて、CSVファイルからデータを読み込み、DataFrameを作成します。

dataFrame = pd.read_csv("C:\\Users\\amit_\\Desktop\\SalesData.csv")

実行例:後方補完のコード全体

以下が実際のコードです。読み込んだDataFrameに対してfillna(method='bfill')を実行し、欠損値を後方の値で埋めています。

import pandas as pd

# CSVファイルからデータを読み込み、DataFrameを作成
dataFrame = pd.read_csv("C:\\Users\\amit_\\Desktop\\SalesData.csv")
print("DataFrame...\n", dataFrame)

# null以外の値を後方へ伝播させて欠損値を埋める
res = dataFrame.fillna(method='bfill')
print("\n後方補完後のDataFrame...\n", res)

出力結果

上記のコードを実行すると、次のような結果が出力されます。

DataFrame...
        Car   Reg_Price   Units
0       BMW        2500   100.0
1     Lexus        3500     NaN
2      Audi        2500   120.0
3    Jaguar        2000     NaN
4   Mustang        2500   110.0

後方補完後のDataFrame...
        Car   Reg_Price   Units
0       BMW        2500   100.0
1     Lexus        3500   120.0
2      Audi        2500   120.0
3    Jaguar        2000   110.0
4   Mustang        2500   110.0

結果のポイント

  • 元のDataFrameでは、インデックス1(Lexus)3(Jaguar)の「Units」列がNaNでした。
  • fillna(method='bfill')を適用すると、LexusのNaNは直後のAudiの値(120.0)で、JaguarのNaNは直後のMustangの値(110.0)でそれぞれ埋められます。
  • これにより、すべての行に有効な数値が揃い、集計や分析をスムーズに行えるようになります。

まとめ

欠損値を後方の値で埋めたい場合は、fillna(method='bfill')を使います。時系列データなどで「直近の既知の値」を引き継ぎたいケースに特に便利です。なお、新しいバージョンのPandasではdf.bfill()メソッドの利用が推奨されている点にも注意しましょう。

  1. Python Pandasのnotnull()メソッドでNULL値(NaN)を確認する方法

    Pandasのnotnull()メソッドは、ブール値(True / False)を返すメソッドです。DataFrameにNULL値(NaN)が含まれている場合はFalseを返し、NULL値でない場合はTrueを返します。ここでは、NaN(NULL値)をいくつか含む次のCSVファイルを例にして説明します。CSVファイルの読み込みまず、read_csv()を使ってCSVファイルを読み込みます。dataFrame = pd.read_csv("C:\\Users\\amit_\\Desktop\\CarRecords.csv")NULL値以外(有効なデータ)の確認notnull(

  2. Python Pandas入門:interpolate()メソッドでNaN値を補間して埋める方法

    はじめにPandasでは、interpolate()メソッドを使うことで、DataFrame内の欠損値(NaN)を補間によって効率的に埋めることができます。このメソッドは、前後の値をもとに線形補間を行い、データの流れを保ちながら自然な形で欠損値を推定します。ここでは、Microsoft Excelで開いた以下のようなCSVファイルを例に説明します。このデータには一部NaN値が含まれています。1. CSVファイルからデータを読み込むまず、read_csv()関数を使って、CSVファイルのデータをPandas DataFrameに読み込みます。dataFrame = pd.read_csv(C:\