データを分析する上では、通常は1つのDataFrameだけではなく、複数のDataFrameを組み合わせて、データを確認・分析していく必要があります。その際に必要となるのが、結合の処理です。
DataFrameの結合方法を、データベースにおけるSQLでのテーブルの結合方法に例えると、結合には行単位の連結であるUNION(ユニオン)と、列単位の連結であるJOIN(ジョイン)の2種類があり、それぞれ次のようなものになります。
- 行単位の連結(UNION):同じ列をもつDataFrameを縦(行を増やす)方向に連結する。
- 列単位の連結(JOIN):結合するキーとなる列を元に、DataFrameを横(列を増やす)方向に連結する。
まずこの記事では、DataFrameの結合方法の1つである行単位の連結(UNION)について学んでいきましょう。Pandasではconcat()やappend()を利用して、複数のDataFrameを連結(UNION)することができます。
列単位の連結(JOIN)の詳しい説明は、「図解!Pandas DataFrameの結合(JOIN)」を参照ください。
またPandasのもう1つのデータ構造であるSeriesの結合方法については、「Pandas Seriesを徹底解説!」を参照ください。
発売数9,000本突破を記念して、今だけ期間限定で87%オフの大セール中!!!
DataFrameの行単位の連結・結合(UNION)とは
同じ列を持つDataFrame同士を結合する方法です。例えば、次のような同じ列を持つ2つのDataFrame df1、df2を繋ぎ合わせて1つのDataFrame df3にする処理のことを行単位の連結(UNION)と言います。
それぞれのDataFrameの行数は異なっても問題無いですが、列は同じものでなければなりません。
それでは、上記の例を実際にコーディングしていきます。まずは、df1、df2のデータを作成します。最初にdf1を作成します。
1 2 3 4 5 6 7 | import pandas as pd list1=[["P001","iPhone 8 64GB",85000], ["P002","iPhone X 256GB",130000], ["P003","iPhone SE 32GB",37000]] columns1 =["Product ID","Product Name","Price (JPY)"] df1=pd.DataFrame(data=list1,columns=columns1) df1 |
次にdf2を作成します。
1 2 3 4 | list2=[["P004", "iPhone 7 32GB", 10000], ["P005", "iPhone 8 Plus 256GB", 62000]] df2 = pd.DataFrame(data=list2, columns=columns1) df2 |
appendでのDataFrameの行単位の連結・結合(UNION)
先ほど準備した2つのDataFrame df1、df2を行単位で結合(UNION)して、DataFrame df3を作成していきます。
DataFrameのUnionの結合には、appendを使います。2つのDataFrameをそれぞれ、DataFrame1、DataFrame2とすると、以下のように記述します。
引数ignore_indexでは、元のDataFrameのインデックスを破棄して新たに振りなおす場合、Trueを指定し、元のインデックスを継承する場合はFalseを指定します。何も指定しないとFalseになります。
df1とdf2をUnionで結合し、df3を作成します。ignore_indexにはTrueを指定して、新たにindexを振り直します。
1 2 | df3=df1.append(df2, ignore_index=True) df3 |
df3の内容を表示すると、このようにdf1とdf2を合わせたものになっていることがわかります。またインデックスは通しの連番で0~4まで振りなおされています。
今度はignore_indexをFalseでappendを実行し、インデックスの違いを確認してみましょう。
1 2 | df3=df1.append(df2, ignore_index=False) df3 |
元のdf1、df2のインデックスがそのまま設定されているのがわかります。
ignore_indexについては、元々のDataFrameのインデックスが連番で振ってあるのであれば、新たに振りなおせるようTrueに設定する方が良いです。
また元のDataFrameのインデックスがProduct IDなど、そのデータをユニークに特定する情報を持つ列に対して設定されているのであれば、そのままのインデックスを使えるようFalseに設定すれば良いです。
また「Pandas – DataFrameへのインデックス設定」の章で学んだように、インデックスを新たに設定し直すことも可能です。
発売数9,000本突破を記念して、今だけ期間限定で87%オフの大セール中!!!
concatによるDataFrameの行単位の連結・結合(UNION)
appendでは無く、concatでも同様にDataFrame同士を行単位で結合(UNION)することができます。
appendとの違いは、concatはリスト型でDataFrameを渡すので、2つ以上の複数のDataFrameをまとめて結合することができます。
concatの例としては、先ほどのappendと同様、2つのDataFrame df1、df2をUnionで結合し、df3に格納してみます。
1 2 | df3=pd.concat([df1,df2],ignore_index=True) df3 |
appendの時と同じ結果が表示されているのがわかります。
関連記事です。
Pandasの中心となるDataFrame(データフレーム)については、次の記事で詳しく解説しております。