Python 無料で独習 データフレームの結合方法(concat)の方法 Pandas入門12

Python
この記事は約5分で読めます。

concatメゾットを使用した結合

前回のmergeメソッドは、データフレームを横に結合する方法でした。
今回学習するconcatメソッドは、
データフレームを縦に結合させる方法だそうです。

まずはいつも通りPandasをインポート。
それと警告文を表示しないようにする為に
warnings
というライブラリもインポートします。

import pandas as pd
import warnings
warnings.filterwarnings('ignore')

そして、結合する為の二つのデータフレームを定義します。

df01 = pd.DataFrame( {'氏名':['佐藤','鈴木','高橋','田中'],
'クラス':['df01','df01','df01','df01'],
'数学': [1, 2, 3, 4],
'国語':[5, 6, 7, 8]})

df02 = pd.DataFrame( {'氏名':['伊藤','渡辺','山本'],
'クラス':['df02','df02','df02'],
'数学': [9, 10, 11],
'国語':[12, 13, 14]})

concatで結合

この二つのデータフレームを結合します。

pd.concat([df01, df02])

 

縦にそのまま結合されます。

indexのわりふり

縦にそのまま結合しただけなので、
それぞれのデータのindexもそのまま引き継いています。
このままではおかしいので、indexを再度わりふります。

pd.concat([df01, df02], ignore_index=True)

複数データフレームの結合

concatは二つ以上のデータフレームの結合も可能です。
三つ目のデータフレームを定義して結合させます。

df03 = pd.DataFrame( {'氏名':['中村','小林','加藤'],
'クラス':['df03','df03','df03'],
'数学': [15, 16, 17],
'国語':[18, 19, 20]})

pd.concat([df01, df02, df03])

インデックスにデータフレーム毎のラベルを追加

今回の結合ではカラム名のクラスに
データフレームの名前がそのまま書いてありますので、
元のデータフレームがなんだったかわかります。

しかし、このカラムがなかったら、元のデータフレームが
なんなのかわからなくなります。

その場合は、keysという引数に任意の名前のリストを渡します。
そのリストの名前がマルチインデックスになります。

keysで指定した名前がインデックスとして表示されています。

pd.concat([df01, df02, df03],keys=['df01','df02','df03'])

共通しないカラムを持つデータフレームの結合

カラムが共通しないデータフレームの結合をやってみます。
まず、数学、国語以外の社会をカラムにもつ
データフレームを定義して、concatで結合してみます。

df04 = pd.DataFrame( {'氏名':['吉田','山田','佐々木'],
'クラス':['df04','df04','df04'],
'数学': [21, 22, 23],
'社会':[24, 25, 26]})

pd.concat([df01, df04])

 
mergeメソッドのouter結合のような感じになります。
ない項目のデータはNaNになっています。

innerでconcat結合

concat結合はデフォルトではouter結合のような感じになっているようで、
join=inner で定義すればinner結合も可能なようです。

pd.concat([df01, df04],join='inner')


共通するカラム、数学のデータフレームができました。

concat結合で結合方向を指定

axis=1を定義すると横方向の結合が可能です。



pd.concat([df01, df04],axis='columns')
でも同様の結果が得られます。

複数データの横結合も可能です。

pd.concat([df01, df02, df03, df04],axis='columns')

複数データのconcat, clumns 結合でも
innerを指定することができまs。

pd.concat([df01, df02, df03, df04],axis='columns',join='inner')

df01.set_index(‘氏名’)とするとindexに氏名を指定することができます。
df01.set_index('氏名')

concatメソッドとmergeメソッドのまとめ

concat
縦方向での
結合
3つ以上のデータフレームを結合できる

merge
2つ以上のカラムキーで結合が可能
leftやrightの結合方法がある。

コメント

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