Python

【TIPS】Pandasのconcat関数でDataFrameを結合する方法まとめ

 

エンジニアライフスタイルブログを運営しているミウラ(@miumiu06171)です。

 

普段はフリーランスでシステムエンジニアをしております。

 

今回は、こちらの前回記事に引き続いて、Pythonでデータ分析の支援を行うPandasのDataFrameを結合・連結するconcat関数について、使い方をまとめてみました。

 

なお、本記事内のPythonソースコードは、JupyterLabで動作を確認しているので、同様に動作確認したい方はこちらの記事も参照し、まずはJupyterLabの環境構築をおこなってください。

 

 

Pandasの結合・連結

 

Pandasの結合・連結とは、2つ以上のDataFrameを結合・連結したりすることを言います。

 

また、PandasでDataFrameを結合する関数として、大きくmerge関数とconcat関数の2つが存在します。

 

本記事では、concat関数を取り上げて使い方を紹介していきます。

 

Pandasのconcat関数の使い方まとめ

 

 

concat関数は、列名(カラム)をキーに2つ以上のDataFrameを1つに結合します。

 

それに加えて、結合方向を縦方向・横方向を選択することができます。

 

本記事では、concat関数のデフォルトが縦方向の結合なので、縦方向の結合を基本として使い方を紹介していきます。

 

 

列名をキーにして縦方向に結合(axis=0 or axis=’index’)

 

列名をキーにして縦方向に結合するには、concat関数の引数にDataFrameオブジェクトをリストで与えます。

 

また、引数axisによって結合方向を指定することができます。

 

【Pythonコード】

 

2つのDataFrameをconcat関数で縦方向に結合している例です。

 

以下の3つの例とも同じ結合結果になります。

 

 

または

 

 

または

 

 

【表示結果】

 

上記PythonコードのDataFrameを表示すると、以下のようになります。

 

 

すべての列名をキーとするので、両方のDataFrameに存在する「氏名」「クラス」「数学」「国語」はそのまま結合されています。

 

そして、merge関数の場合は横方向であったが、concat関数はデフォルトで縦方向に結合しています。

 

また、インデックス番号は元のDataFrameの情報をそのまま結合していることがわかります。

 

 

インデックス番号を再度振り直す(ignore_index)

 

DataFrameを結合した後にインデックス番号を振り直すには、引数ignore_indexを使用します。

 

【Pythonコード】

 

引数ignore_indexを使ってインデックス番号を再度振り直す例です。

 

 

【表示結果】

 

上記PythonコードのDataFrameを表示すると、以下のようになります。

 

 

「ignore_index=True」を指定することで、結合結果のDataFrameのインデックス番号が再度振り直されていることがわかります。

 

 

元のDataFrameを区別する(keys)

 

結合した後も元のDataFrameを区別するためには、引数keysを使用します。

 

【Pythonコード】

 

引数keysを使用して結合している例です。

 

 

【表示結果】

 

上記PythonコードのDataFrameを表示すると、以下のようになります。

 

 

結合結果のDataFrameにkeysで指定した文字列がインデックスに追加されて、マルチインデックスになっていることがわかります。

 

これにより、元のDataFrameを区別することができます。

 

 

異なる列名を持つDataFrameを結合する

 

異なる列名を持つ2つのDataFrameを結合する場合について紹介します。

 

【Pythonコード】

 

「国語」を持つDataFrame(df1)と、「理科」を持つDataFrame(df4)を結合している例です。

 

 

【表示結果】

 

上記PythonコードのDataFrameを表示すると、以下のようになります。

 

 

共通する列(「氏名」「クラス」「数学」)は縦方向にそのまま結合され、共通しない列(「国語」「理科」)の値はNaNになっています。

 

 

3つ以上のDataFrameを縦方向に結合

 

3つ以上のDataFrameを縦方向に結合する方法を紹介していきます。

 

3つのDataFrameを結合

 

3つのDataFrameを結合するには、concat関数の引数にDataFrameオブジェクトをリストで指定します。

 

【Pythonコード】

 

3つのDataFrameをconcat関数で結合している例です。

 

 

【表示結果】

 

上記PythonコードのDataFrameを表示すると、以下のようになります。

 

 

リストで指定した順でDataFrameオブジェクトが縦方向に結合されていることがわかります。

 

リストで指定するDataFrameオブジェクトを増やしていくと、3つ以上の結合が可能です。

 

元のDataFrameを区別する(keys)

 

元のDataFrameを区別するには、2つのDataFrameのときと同様に引数keysを使用します。

 

【Pythonコード】

 

引数keysを使用して結合している例です。

 

 

【表示結果】

 

上記PythonコードのDataFrameを表示すると、以下のようになります。

 

 

 

結合方法を指定(join)

 

concat関数で結合方法を指定するには、引数joinを使用します。

 

結合方法が何かわからない方は、こちらを参照ください。

 

外部結合(join=’outer’)

 

外部結合によって左右両方のDataFrameのデータを残します。

 

【Pythonコード】

 

2つのDataFrameをconcat関数で外部結合している例です。

 

 

【表示結果】

 

上記PythonコードのDataFrameを表示すると、以下のようになります。

 

 

外部結合した結果、「氏名」「クラス」「数学」はそのまま縦方向に結合しており、DataFrame独自の列「国語」「理科」もそれぞれ結合されていることがわかります。

 

 

内部結合(join=’inner’)

 

内部結合によって左右のDataFrameでお互い一致するデータを残します。

 

【Pythonコード】

 

2つのDataFrameをconcat関数で内部結合している例です。

 

 

【表示結果】

 

上記PythonコードのDataFrameを表示すると、以下のようになります。

 

 

内部結合した結果、DataFrameで共通する列「氏名」「クラス」「数学」が縦方向に結合されていることがわかります。

 

 

左結合、右結合

 

concat関数では、左結合、右結合はできません。

 

左結合、右結合したい場合は、こちらのmerge関数を使用してください。

 

 

列名をキーにして横方向に結合(axis=1 or axis=’columns’)

 

DataFrameを横方向に結合するには、「axis=1」または「axis=’columns’」を使用します。

 

【Pythonコード】

 

2つのDataFrameをconcat関数で横方向に結合している例です。

 

 

または

 

 

 

【表示結果】

 

上記PythonコードのDataFrameを表示すると、以下のようになります。

 

 

 

 

 

まとめ

 

いかがでしたでしょうか。

 

Pandasのconcat関数を使って結合・連結する方法を紹介してきました。

 

concat関数は、3つ以上のDataFrameの結合を行えたり、結合方向を縦・横に変更できたりするので、merge関数とうまく使い分けできるようになっておくとよいでしょう。

 

そして、Pandasの操作にはもっと色々な操作がありますので、ぜひ学んでマスターしていきましょう。