18. Pandasでデータ分析

Pandas DataFrameの結合(Union)

更新日:

データを分析する上で、1つのDataFrameだけではなく、通常は複数のDataFrameを組み合わせて、データを確認していく必要があります。その際に必要となるのが、結合の処理です。
 
結合にはUnion(ユニオン)とJoin(ジョイン)の2種類があります。まず、この章ではUnionについて学んでいきましょう。
Joinについて知りたい場合は、こちらのリンクより遷移ください。

著書紹介(清水 義孝)

好評発売中!!

Unionとは

同じ列を持つDataFrame同士を結合する方法です。
 
例えば、次のような同じ列を持つ2つのDataFrame df1、df2を繋ぎ合わせて1つのDataFrame df3にする処理のことをUnionと言います。それぞれのDataFrameの行数は異なっても問題無いですが、列は同じものでなければなりません。

それでは、上記の例を実際にコーディングしていきます。まずは、df1、df2のデータを作成します。最初にdf1を作成します。

In [1]: 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
Out[1]:

 
 
 
 

 
次にdf2を作成します。

In [2]: list2=[["P004", "iPhone 7 32GB", 10000],
...:           ["P005", "iPhone 8 Plus 256GB", 62000]] ...: df2 = pd.DataFrame(data=list2, columns=columns1)
...: df2
Out[2]:

 
 

 
 

著書紹介(清水 義孝)

好評発売中!!

appendでのDataFrameの結合(Union)

先ほど準備した2つのDataFrame df1、df2をUnionで結合して、DataFrame df3を作成していきます。
 
DataFrameのUnionの結合には、appendを使います。2つのDataFrameをそれぞれ、DataFrame1、DataFrame2とすると、以下のように記述します。

DataFrame1.append(DataFrame2, ignore_index=True/False)

引数ignore_indexでは、元のDataFrameのインデックスを破棄して新たに振りなおす場合、Trueを、元のインデックスを継承する場合はFalseを指定します。何も指定しないとFalseになります。
 
df1とdf2をUnionで結合し、df3を作成します。ignore_indexにはTrueを指定して、新たにindexを振り直します。

In [3]: df3=df1.append(df2, ignore_index=True)
...: df3
Out[3]:

 
 
 
 
 

df3の内容を表示すると、このようにdf1とdf2を合わせたものになっていることがわかります。またインデックスは通しの連番で0~4まで振りなおされています。
 
今度はignore_indexをFalseでappendを実行し、インデックスの違いを確認してみましょう。

In [4]: df3=df1.append(df2, ignore_index=False)
...: df3
Out[4]:

 
 
 
 
 

元のdf1、df2のインデックスがそのまま設定されているのがわかります。ignore_indexについては、元々のDataFrameのインデックスが連番で振ってあるのであれば、新たに振りなおせるようTrueに、元のDataFrameのインデックスがProduct IDなど、そのデータをユニークに特定する情報を持つ列に対して設定されているのであれば、そのままのインデックスを使えるようFalseに設定すれば良いかと思います。
 
また「Pandas – DataFrameへのインデックス設定」の章で学んだように、インデックスを新たに設定し直すことも可能です。
 
 

著書紹介(清水 義孝)

好評発売中!!

concatによるDataFrameの結合(Union)

appendでは無く、concatでも同様にDataFrame同士をUnionで結合することができます。

pd.concat([DataFrame1,DataFrame2,DataFrame3…],ignore_index=True/False)

appendとの違いは、concatはリスト型でDataFrameを渡すので、2つ以上のDataFrameをまとめてUnionで結合することができます。
 
concatの例としては、先ほどのappendと同様、2つのDataFrame df1、df2をUnionで結合し、df3に格納してみます。

In [5]: df3=pd.concat([df1,df2],ignore_index=True)
...: df3
Out[5]:

 
 
 
 
 

appendの時と同じ結果が表示されているのがわかります。

 
 
関連記事です。
Pandasの中心となるDataFrame(データフレーム)については、次の記事で詳しく解説しております。

 

-18. Pandasでデータ分析

Copyright© AI-interのPython3入門 , 2019 All Rights Reserved.