見出し画像

[Python] pandas 上下の値を使って欠損値を埋める

はじめに

CSVファイルを読み込んだ際、値が欠損している場合、上方向の値で埋める処理を、pandasで実現する方法について、まとめます。

イメージとしては、Excelの「フィル」機能を同じことを、pandasで対応するとなります。

下記のようなサンプルの場合、B2セルの日付を、B3セルからB7セルの間の空白に値を設定したいとします。
Excelで操作する場合、①対象セルを選択し、②「ホーム」タブから③「フィル」をクリックします。
④メニューから、「下方向へのコピー」を選択します。

Excelの「フィル」機能

実行後は、B2セルの日付が、B3セルからB7セルの間に設定されます。

Excelの「フィル」実行後

サンプルデータ

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にffillを指定

なお、逆方向である、後ろ方向で置換を行いたい場合には、methodに、bfill、またはbackfillを指定します。

df.fillna(method='backfill')
引数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')

書き出しした結果は、下記となりました!

fillnaメソッド実行後

まとめ

今回は、pandasのDataFrameで、値が欠損している場合、上下の値で埋める実装についてまとめました。

いいなと思ったら応援しよう!