Python仕事術

DataFrameの結合(Pythonでデータベースの結合をする)

  • 複数のDataFrameの結合をしたい方
  • エクセルのVLOOKUP関数のようなことをPythonでやりたい方

(本記事のコードを作成した開発環境はGoogle Colaboratory Python 3.7.13 となります。)

本記事ではPythonのDataFrameを結合するメソッド

  • concatメソッド
  • mergeメソッド

の使い方について解説していきます。

本記事を読むことで思い通りに複数のDataFrameを結合することができるようになるかと思います。

特にmergeメソッドはエクセルのVLOOKUP関数のように基準となるキーを選択し、紐づけて結合することができますが、エクセルのVLOOKUP関数は一行ずつ行うのに対しmergeメソッドはDataFrame全体を結合することができるのでなれると便利かと思います。

目次
  • concatメソッドとmergeメソッドの違い
  • concatメソッドの使い方
  • concatメソッドの用途
  • mergeメソッドの使い方
  • mergeメソッドの用途

concatメソッドとmergeメソッドの違い

この2つのメソッドについて機能の違いを表にまとめました。

比較項目concat関数merge関数
結合可能なDataFrame数複数2つ
結合時にキーにできるcolumn数2つ以上
デフォルト時のデータの結合方向indexが増えるcolumnが増える
結合の種類inner
outer
inner
outer
left
right
簡単に言うと
  • concat:複数のDataFrameをシンプルに連結させる(DataFrameを縦もしくは横に連結させる)
  • merge:キーとなるデータ列を選択して2つのDataFrameを結合させる

という違いがあります。

concatメソッドの使い方

今回の解説で使うエクセルデータのリンクを下記に張っておきます。

エクセルデータ内には3つのSheetを用意しました。pandasをインポートしてからそれぞれdf1~3として読込むと下記のようになります。

DataFrameの連結

引数を特に指定しなければ指定したリスト内のDataFrameが縦に結合されます。

また、リストで指定するDataFrameは2つ以上あっても問題なく縦に結合されます。

この時、共通しないcolumnを持つDataFrameを結合した場合、それぞれデータがない部分はNaNになります。

index番号の振り直し

結合した後のindex番号は元のindex番号を継承しますが、引数ignore_index = True を選択することでindex番号を振り直すことができます 。

DataFrameを横に連結させる

引数axis = 1(もしくは「’columns’」)を選択することで横に結合することができます。

元のDataFrameを区別する

元のDataFrameをわかりやすくするために、引数keysでindexにラベルを設定することができます。

concatメソッドの用途

複数のエクセルデータを単純に結合する。

年月単位(店舗の月ごとの売上)や団体単位(学校クラスの成績)など、同じようなフォーマットで作られたエクセルデータを複数結合するのに便利です。エクセルを開いてコピペするより断然早く結合することができます。

Webスクレイピングでのデータ収集に活用

検索とデータ収集を繰り返すようなWebスクレイピングを行う際に、検索した内容を1行のDataFrameとして格納し、それをconcatメソッドで重ねていくように連結していくことによりデータベースを簡単に作ることができたりします。

mergeメソッドの使い方

今回の解説で使うエクセルデータのリンクを下記に張っておきます。

エクセルデータ内には3つのSheetを用意しました。それぞれdf4~6として読込むと下記のようになります。

キーとなるcolumn名を選択して結合

結合する2つのDataFrameを選択し、引数onでキーとなるcolumn名を選択します。下記では「店舗名」columnをキーとしてdf4とdf5を結合させました。

キーとなるcolumn名が異なる場合、引数left_on及びright_onを使用して各DataFrameごとにキーとなるcolumn名を選択します。

また、引数left_index及びright_indexを True にすることで indexを結合キーにすることもできます。

結合の種類

結合の種類は4種類あります。引数howで選択します。

inner

2つのDataFrameの共通しているキーのみ結合します。(howのデフォルトはinner)

outer

共通しているものだけ結合し、それ以外もそのまま残ります。

left

左のDataFrameをベースに結合します。

right

右のDataFrameをベースに結合します。