【Python】PandasのDataFrameの組み合わせ- merge(), join(), concate()による結合

Pandas
スポンサーリンク

Pythonの拡張モジュールPandasのDataFrameの操作をしてきましたが、複数のDataFrameを組み合わせる必要がある場面も出てきます。

PandasにはDataFramesを組み合わせる方法として、主に3つの方法があります。ここでは、merge(), Join(), concate()を使って組み合わせの方法を見て行こうと思います。

スポンサーリンク

concat()

まずはconcat()から見ていきましょう。

concat()を使えば、基本的にDataFrameをつなぎ合わせることができます。ただし、連結するデータの次元が一致する必要があることに注意が必要です。

jupyter notebookでPythonを起動してpandasをインポートしてます。例として次のようなDataFrameを3つ作ってみます。

実行してみます。

それぞれのDataFrameを表示すると次のようになります。

pd.concat()にDataFrameのリストを渡して、連結することができます。

次のように先に用意した3つのDataFrameをリストで渡してみます。

columnが全て揃っているので縦方向に連結されているのがわかります。

同じconcat()にaxis=1を渡すことで、横軸方向に連結することができます。

columnが横に連結される形になっていますが、インデックスが揃った値ではないので該当しない部分にはNaNが入れられて表示されています。

スポンサーリンク

merge()

次はmerge()を扱ってみます。

merge()を使用すると、SQLテーブルをmergeするのと同様のロジックを使用してDataFrameを連結することができます。

次のような共通のキーを持つ単純なDataFrameを2つ用意してみます。

それぞれのDataFrameを次のように表示されます。

この2つのDataFrameをmerge()に渡して連結してみます。

次元も揃っているのでキーを共通にして連結されています。これは見やすくてわかりやすいと思います。

では、今度は次のように複雑なDataFrameを作ってみます。

2つのキーが共通していますが、その値はそれぞれ違います。

それぞれ表示すると次のようになります。

この2つのDataFrameをこれまでと同様にmerge()してみます。

2つのDataFrameに共通しているkey1, key2を軸に連結されますが、さらにそのkey1, key2の値でどちらにも共通している値を持つ部分でされています。

この複雑なDataFrameをさらに違う操作で値を取得することができます。それには、howキーワードとonキーワードを使います。

onキーワードで明示的に列名を与えて、howキーワードにouterを指定して外部結合させてみます。

全ての要素が結合されて、値の無い部分にNaNが入れられているのがわかります。集合和の形ですね。

このhowにはleft, rightを指定して、それぞれ左、右のデータセットに存在する行に合わせてデータを結合できます。

まずhow=’right’で右結合してみましょう。

df_rightのkey1, key2に合わせて結合されているのがわかります。要素の無い部分にはNaNが入っています。

今度はhow=’left’で左結合してみます。

df_leftのkey1, key2に合わせて結合され、要素の無い部分にNaNが入っています。

スポンサーリンク

join()

最後にJoin()を見ていきます。

join()は異なるインデックスを持つ2つのDataFrameを1つに結合する方法です。

次のindexの異なる2つのDataFrameを用意します。

DataFrameをjoin()で結合するには次のように行ないます。

df_leftのインデックスに合わせて結合されているのがわかります。

今度はこれに、how=’outer’を指定して外部結合させてみます。

要素の無い部分にNaNを入れて、2つのDataFrameが全て結合されているのがわかります。

スポンサーリンク

最後に

ここでは、Pythonの拡張モジュールPandasのDataFrameの結合を見てきました。

PandasにはDataFramesを組み合わせる方法として主に3つの方法があります。

concate()、merge()、Join()の3つです。

これらを使ってDataFremeの結合を見てきましたが、それぞれの機能の特徴をよく理解しましょう。

タイトルとURLをコピーしました