Python in ExcelでDataFrameを操作してみた(merge / sort / query の基本)

pandas python 1

Excel上でPythonが使える「Python in Excel」を使うことで、これまで複雑だったデータ加工や結合処理を、pandasのDataFrame操作として直感的に行えるようになります。この記事では、Python in Excel環境を前提に、mergeによる表結合、sort_valuesによる並び替え、queryによる条件抽出といった、実務でよく使う基本操作を例とともに解説します。Excelユーザーが無理なくPythonによるデータ処理に踏み出すための入門内容です。

Python in Excelの基本に関しては、以下の記事を参考にしてください。

Python in Excelにおけるpandas DataFrameの基本 – Lean Data Office

データフレームを定義する

image

二つのデータセットをデータフレームとして読ませて使用します。

一つがバンド名とジャンル、結成年を記載し、もう一つが、それぞれのバンドのメンバーの数を記載したデータです。

別シートにて、それぞれのDataFrameをbands1とbands2とPythonで再定義します。

bands1が、上の表の左、bands2が上の表の右に対応しています。

image

データフレームを結合する:merge

merge()はpandasのメソッドで、二つのデータフレームに共通のキーがあれば、そのキーをベースに結合します。

下の二つのテーブルを確認すると、Group列が完全一致しているため、明示的にどのキーを使って結合するかを示さなくてもGroup列をキーに結合します。

複数のキー候補が存在する場合には以下のコードを例に明示的に示すことをお勧めします。

df = df1.merge(df2, on="Group")
image

ここでは、bands1をmergeメソッドでbands2と結合します。

そのため以下を実行します。

image

Members列が追加され、新たなDataFrameとしてbandsを定義できました。

image

データフレームを並べ替える:sort_values

ここでは上の項で定義したbandsのデータフレームをジャンル(Genre)をアルファベット順に昇順、結成年(Year)を降順に並べ替えを実施します。まず、先にジャンルを指定するので、ジャンル側が優先的に並べ替えられます。

sort_value()メソッドがとる主な引数は、

by(必須): 何を基準に並び変えるか

ascending: 昇順か降順か

の二つです。ここではGenreを昇順、Yearを降順に並び替えます。

image

実行すると、Genre列は昇順、Year列は降順に並べ替えができました。

Genre、Yearの順で配置したのでGenreが優先的に並び替えされていることに気づくかと思います。

image

データフレームを抽出する:query

queryメソッドは、DataFrameから所定の条件のデータを抽出するpandasのメソッドです。

queryの引数に条件式を入れて、その条件式にあったデータを新たなデータフレームbandsqに入れるコードです。

bandsq = bands.query("Genre == 'Alternative rock' and Members >= 4")
image

実行すると、’Alternative rock’と4人以上のメンバーのバンドだけが抽出できました。

image

ここでお気づきの方もいるかもしれませんが、sort_valuesとqueryからインデックス番号が左端に表示されています。これは、mergeで新たに作成したdfに振られたインデックス番号が表示されている状態です。これを表示しない方法も併せて解説します。

インデックス番号を表示させたくない場合には、

.reset_index(drop=True)

を最後に追加してください。

image

抽出した内容を出力する際にインデックスを非表示にできます。

データフレームを抽出する:isin

isinメソッドは[条件式]のカッコ内の式に当てはまる行を残す定番の構文です。

ここでは、bandsの”Genre”が”Pop”もしくは”Rock”になっている行を残すコードを書いています。

image

bands[“Genre”]で”Genre”列を抽出し、isin()にタプルで”Pop”と”Rock”を渡しています。

結果、PopとRockだけがTrueの行と判定され、データフレームに残されます。

image

データフレームを抽出する:startswith

startswithメソッドを使えば、ある文字列で開始された行だけ抽出することも可能です。

この例では、Group列の値が”The”で始まる行だけ抽出してみます。

bands[条件式]の条件式に、bands[“Group”]で”Group”列を抽出するところまではisinと同じ、このあと、.strで各要素に文字列メソッドを適用します。startswithは文字列専用のメソッドなので、かならず前に.strが付いてきます。

startswithの引数に今回検索したい”The”を渡したのが以下のコードです。

image

これで実行すると、期待通りTheで始まるバンドのみ抽出することができました。

image

データフレームに関数を適用する:apply

applyメソッドはデータフレーム全体に関数を適用することができます。

ここでは、バンド名をすべてUpper Case(大文字)にしてみます。.upperメソッドを使います。

image

applyは引数に関数オブジェクトを渡します。ここでは(str.upper)が例です。

実行してみます。

すべてのバンド名が大文字に変更されています。

image

まとめ

Python in Excelを使えば、ExcelのデータをpandasのDataFrameとして扱い、結合・並び替え・抽出といった操作をシンプルなコードで実現できます。mergeで表同士の関係を整理し、sortqueryで必要なデータを素早く整形することで、従来のExcel操作よりも再現性と可読性の高い処理が可能になります。まずは基本操作を押さえ、ExcelとPythonを組み合わせたデータ処理に慣れていくことが重要です。

筋トレとオートメーションが趣味。 モバイルアプリ個人開発者。 データ処理・可視化とレポートにハマり備忘録と情報共有のためにブログ開設し運営している。