本記事では、PythonでExcel のフィルター(完全一致、部分一致、複数条件)を行う方法をご紹介します。
Pythonの実行環境
今回は、以下の実行環境でプログラムを実行しています。
・Python 3.7.6
・Jupyterlab 1.2.6
・Pandas:1.1.2
テストデータは、次のような予算管理表を使います。
ファイル名は「テストデータ.xlsx」で、シート名は「予算管理表」です。
■予算管理表
本記事で、利用するライブラリはPandasです。
そして、テストデータの予算管理表をdfとして読み込んでおきます。
import pandas as pd
df = pd.read_excel('テストデータ.xlsx', sheet_name = '予算管理表')
※本記事では、Pythonのコードの下のコメントアウトは、出力結果を示しています。
PythonでExcelのフィルターの操作を行う方法(完全一致)
まずは、もっとも基本的な1つのフィルターで完全一致の値を抽出するフィルターをみていきます。
filter_syoumou = df['費目1'] == '1-消耗品費'
df[filter_syoumou]
まず1行目では、filter_syoumouとしてフィルターを定義しています。
「費目1」列で、値が '1-消耗品費' となるものを抽出しています。
この定義したフィルターを、2行目のようにdf[ ]の中に入れると、フィルターが実現できます。
結果は次の通りとなります。
PythonでExcelのフィルターの操作を行う方法(部分一致)
次は、部分一致の条件でフィルターをする方法をみていきます。
これもExcelでも頻繁に使う機能ですね。
例として、テストデータの「件名」列で、’改修’ という単語を含む行を抽出してみます。
filter_kaisyu = df['件名'].str.contains('改修')
df[filter_kaisyu]
これも先ほどと同様に、まずは、filter_kaisyuとしてフィルターを定義します。
定義の仕方は先ほどと異なり、str.contains()というものを使います。
これは、文字列の中で、()内の文字列を含むとTrueにする関数です。ぜひ覚えておきましょう。
結果は次の通りとなり、「件名」列で '改修' を含む行が抽出されています。
またこの方法は、複数の文字列の部分一致をOR条件としてフィルターすることができます。
filter_kaisyu_torikae = df['件名'].str.contains('改修|取替')
df[filter_kaisyu_torikae]
「改修」もしくは「取替」を含む行が抽出されました。
この方法は、OR条件で抽出されることを忘れないでください。
PythonでExcelのフィルターの操作を行う方法(数値の大小条件)
ここまでは文字列のフィルターでしたが、次は数値の大小の条件に基づくフィルターをみていきます。
「2021年度」列の金額が2,000以上になる行を抽出してみます。
filter_over_2000 = df['2021年度'] >= 2000
df[filter_over_2000]
これは、書き方としても不等号を使うだけなので、非常に分かりやすいものではないでしょうか。
結果は、「2021年度」列の金額が、2,000以上の行のみがフィルターされていることが分かります。
PythonでExcelのフィルターの操作を行う方法(複数フィルターの組み合わせ)
最後に、複数のフィルターの組み合わせる方法をみていきます。
これまで定義してきたフィルターは、実は、AND条件またはOR条件で組み合わせることができます。
例えば、「費目1」列が '1-消耗品費' であり、かつ、「2021年度」列の金額が2,000以上になるフィルターをみてみます。
filter_syoumou_and_2000 = filter_syoumou & filter_over_2000
df[filter_syoumou_and_2000]
フィルターを&で繋げることで、AND条件で、フィルターが適用されていることが分かります。
OR条件とする場合は、& を | に変えるだけでOKです。
filter_syoumou_or_2000 = filter_syoumou | filter_over_2000
df[filter_syoumou_or_2000]
OR条件でフィルターされていることが分かります。
以上、PythonでExcelのフィルターの操作を行う方法を説明してきました。
最後まで読んでいただき、ありがとうございました。