[Python] pandas 上下の値を使って欠損値を埋める
はじめに
CSVファイルを読み込んだ際、値が欠損している場合、上方向の値で埋める処理を、pandasで実現する方法について、まとめます。
イメージとしては、Excelの「フィル」機能を同じことを、pandasで対応するとなります。
下記のようなサンプルの場合、B2セルの日付を、B3セルからB7セルの間の空白に値を設定したいとします。
Excelで操作する場合、①対象セルを選択し、②「ホーム」タブから③「フィル」をクリックします。
④メニューから、「下方向へのコピー」を選択します。
実行後は、B2セルの日付が、B3セルからB7セルの間に設定されます。
サンプルデータ
B列の「日付」フィールドに欠損があるデータを使用します。
この「日付」フィールドが空白、欠損値の場合、上方向の日付で埋めていきます。
使用するライブラリ
pandas
データ分析をサポートするPythonのライブラリです。
動作環境
windows11
Jupyter Notebook 6.4.8(Python 3.9.12)
Python 3.10.2
実装
全体の実装は、下記です。
import pandas as pd
file_path = r'fillna_test.csv'
df = pd.read_csv(file_path, encoding="cp932")
df = df.fillna(method='ffill')
file_path = r'./fillna_test_after.csv'
df.to_csv(file_path, header=True, index=False, encoding='cp932')
順番に処理の内容を説明します。
CSVファイルを読み込む
CSVファイルを読み込むには、pandasのread_csvメソッドを使用します。
import pandas as pd
file_path = r'fillna_test.csv'
df = pd.read_csv(file_path, encoding="cp932")
前方向の値で置換する
欠損値を置換するメソッドは、fillnaメソッドを使用します。
df = df.fillna(method='ffill')
fillnaメソッドを使用して欠損値を置換する方法には、いくつかあります。
共通の値で、すべての列を一律で置換を行う
列ごとに、特定の値で置換を行う
前後の値で置換を行う
今回は、「前後の値で置換を行う」方法を使用します。fillnaメソッドの引数methodを指定します。
methodに、ffill、またはpadを指定すると、前方向の値で置換されます。
df.fillna(method='ffill')
なお、逆方向である、後ろ方向で置換を行いたい場合には、methodに、bfill、またはbackfillを指定します。
df.fillna(method='backfill')
CSVファイルを書き出す
CSVファイルを書き出すには、to_csvメソッドを使用します。
見出し行は出力、インデックスは出力せずに、CSVファイルに書き出しをします。
file_path = r'./fillna_test_after.csv'
df.to_csv(file_path, header=True, index=False, encoding='cp932')
書き出しした結果は、下記となりました!
まとめ
今回は、pandasのDataFrameで、値が欠損している場合、上下の値で埋める実装についてまとめました。