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の結合方法がある。
コメント