Pands𞓜19合併/接続
34559 ワード
Pandsは機能が全面的な高性能メモリに接続して操作します。SQLなどの関係データベースと非常に似ています。Pandsは、DATAFrameオブジェクト間のすべての標準データベース接続動作の入口として、単独の
merge()
関数を提供する。pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True)
left-DataFrameオブジェクトです。 right-もう一つのData Frameオブジェクト。 on-列(名前)は、左と右のDataFrameオブジェクト中に存在しなければなりません。 left_オン−左のDataFrame内の列はキーとして使用され、列名または長さがDataFrame長に等しい配列とすることができる。 right_on-右からのDataFrameの列をキーとして、列名または長さがData Frameの長さに等しい配列とすることができます。 left_index- True
であれば、左のDataFrameのインデックス(行ラベル)をその接続キーとして使用する。MultiIndex(階層)を有するDataFrameの場合、レベルの数は右DataFrameからの接続キーの数と一致しなければならない。right_index-と右DataFrameのleft_indexは同じ用法を持っている。 how-left、right、outerおよびinnerのうちの一つです。デフォルトはインナーです。それぞれの方法の使い方を紹介します。 sort-結果DataFrameを辞書順に接続キーで並べ替えます。デフォルトは 現在は2つの異なるDataFrameを作成し、それらを統合します。True
で、False
に設定されると、多くの場合、性能が大幅に向上する。出力結果:import pandas as pd
left = pd.DataFrame({ 'id':[1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']})
right = pd.DataFrame( {'id':[1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) print (left) print("========================================") print (right)
Name id subject_id 0 Alex 1 sub1 1 Amy 2 sub2 2 Allen 3 sub4 3 Alice 4 sub6 4 Ayoung 5 sub5 ======================================== Name id subject_id 0 Billy 1 sub2 1 Brian 2 sub4 2 Bran 3 sub3 3 Bryce 4 sub6 4 Betty 5 sub5
一つのキーで二つのデータフレームを結合する。出力結果:import pandas as pd left = pd.DataFrame({ 'id':[1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']}) right = pd.DataFrame( {'id':[1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) rs = pd.merge(left,right,on='id') print(rs)
Name_x id subject_id_x Name_y subject_id_y 0 Alex 1 sub1 Billy sub2 1 Amy 2 sub2 Brian sub4 2 Allen 3 sub4 Bran sub3 3 Alice 4 sub6 Bryce sub6 4 Ayoung 5 sub5 Betty sub5
複数のキーの2つのデータボックスを結合します。出力結果:import pandas as pd left = pd.DataFrame({ 'id':[1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']}) right = pd.DataFrame( {'id':[1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) rs = pd.merge(left,right,on=['id','subject_id']) print(rs)
Name_x id subject_id Name_y 0 Alice 4 sub6 Bryce 1 Ayoung 5 sub5 Betty
「how」を使うパラメータを統合します。
どのように結合パラメータを指定しますか?どのキーが結果表に含まれますか?結合キーが左または右のテーブルに現れない場合、接続テーブルの値はNA
となる。
ここではhow
オプションとSQL等価名のまとめです。
統合の方法
SQL等価
説明left
LEFT OUTER JOIN
左のオブジェクトのキーを使うright
RIGHT OUTER JOIN
右のオブジェクトのキーを使うouter
FULL OUTER JOIN
キーの結合を使うinner
INNER JOIN
キーの交点を使う
Left Joinの例出力結果:import pandas as pd left = pd.DataFrame({ 'id':[1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']}) right = pd.DataFrame( {'id':[1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) rs = pd.merge(left, right, on='subject_id', how='left') print (rs)
Name_x id_x subject_id Name_y id_y 0 Alex 1 sub1 NaN NaN 1 Amy 2 sub2 Billy 1.0 2 Allen 3 sub4 Brian 2.0 3 Alice 4 sub6 Bryce 4.0 4 Ayoung 5 sub5 Betty 5.0
Right Joinの例出力結果:import pandas as pd left = pd.DataFrame({ 'id':[1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']}) right = pd.DataFrame( {'id':[1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) rs = pd.merge(left, right, on='subject_id', how='right') print (rs)
Name_x id_x subject_id Name_y id_y 0 Amy 2.0 sub2 Billy 1 1 Allen 3.0 sub4 Brian 2 2 Alice 4.0 sub6 Bryce 4 3 Ayoung 5.0 sub5 Betty 5 4 NaN NaN sub3 Bran 3
Outer Joinの例出力結果:import pandas as pd left = pd.DataFrame({ 'id':[1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']}) right = pd.DataFrame( {'id':[1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) rs = pd.merge(left, right, how='outer', on='subject_id') print (rs)
Name_x id_x subject_id Name_y id_y 0 Alex 1.0 sub1 NaN NaN 1 Amy 2.0 sub2 Billy 1.0 2 Allen 3.0 sub4 Brian 2.0 3 Alice 4.0 sub6 Bryce 4.0 4 Ayoung 5.0 sub5 Betty 5.0 5 NaN NaN sub3 Bran 3.0
Inner Joinの例
接続は索引上で行います。接続(Join
)動作は、呼び出したオブジェクトに与えられる。したがって、a.join(b)
はb.join(a)
に等しくない。出力結果:import pandas as pd left = pd.DataFrame({ 'id':[1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']}) right = pd.DataFrame( {'id':[1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) rs = pd.merge(left, right, on='subject_id', how='inner') print (rs)
Name_x id_x subject_id Name_y id_y 0 Amy 2 sub2 Billy 1 1 Allen 3 sub4 Brian 2 2 Alice 4 sub6 Bryce 4 3 Ayoung 5 sub5 Betty 5