Python の pandas ライブラリが提供する 4 種類の DataFrame 結合
pandas ライブラリを使用して、いくつかの異なる方法でデータ セットを結合します。
データ アナリストは、複数のデータセットを結合する必要に直面することがよくあります。分析を完了し、ビジネス/関係者に対して結論を得るには、これを行う必要があります。
データが異なるテーブルに保存されている場合、データを表現するのは困難なことがよくあります。このような状況では、作業しているプログラミング言語に関係なく、結合がその価値を発揮します。
Python 結合は SQL 結合に似ており、共通のインデックスで行を照合することでデータ セットを結合します。
参照用に 2 つの DataFrame を作成する
このガイドの例に従うために、2 つのサンプル DataFrame を作成できます。次のコードを使用して、ID、名、姓を含む最初のデータフレームを作成します。
import pandas as pd
a = pd.DataFrame({"ID": ["001", "002", "003", "004", "005"],
"Fname": ["Ron", "John", "Helen", "Jenny", "Kenny"],
"Lname": ["Keith", "Harley", "Smith", "Kerr-Hislop", "Barber"]})
print(a)
最初のステップとして、パンダ ライブラリをインポートします。次に、変数 a を使用して、DataFrame コンストラクターからの結果を保存できます。必要な値を含むディクショナリをコンストラクターに渡します。
最後に、print 関数を使用して DataFrame 値の内容を表示し、すべてが期待どおりに表示されることを確認します。
同様に、ID と給与値を含む別のデータフレーム b を作成できます。
b = pd.DataFrame({"ID": ["001", "002", "003", "004", "005"],
"Salary": [100000, 700000, 80000, 904750, 604772]})
print(b)
出力はコンソールまたは IDE で確認できます。 DataFrame の内容を確認する必要があります。
結合は Python のマージ関数とどう違うのですか?
pandas ライブラリは、DataFrame の操作に使用できる主要なライブラリの 1 つです。 DataFrame には複数のデータ セットが含まれるため、それらを結合するために Python ではさまざまな関数が使用できます。
Python は、DataFrame を結合するために使用できる結合関数とマージ関数をはじめとする多くの関数を提供します。これら 2 つの関数には大きな違いがあるため、どちらかを使用する前に覚えておく必要があります。
join 関数は、インデックス値に基づいて 2 つの DataFrame を結合します。マージ関数は、インデックス値と列に基づいて DataFrame を結合します。
Python の結合について知っておくべきことは何ですか?
使用可能な結合の種類について説明する前に、いくつかの重要な点に注意してください。
- SQL 結合は最も基本的な関数の 1 つであり、Python の結合とよく似ています。
- DataFrame に結合するには、pandas.DataFrame.join() メソッドを使用できます。
- デフォルトの結合は左結合を実行しますが、マージ関数は内部結合を実行します。
Python 結合のデフォルトの構文は次のとおりです。
DataFrame.join(other, on=None, how='left/right/inner/outer', lsuffix='', rsuffix='',
sort=False)
最初の DataFrame で join メソッドを呼び出し、2 番目の DataFrame を最初のパラメータであるother として渡します。残りの引数は次のとおりです。
- on は、結合するインデックスを指定します (複数ある場合)。
- 方法: 内部、外部、左、右などの結合タイプを 定義します。
- lsuffix は、列名の左側の接尾辞文字列を定義 します。
- rsuffix。 列名の正しい接尾辞文字列を定義します。
- sort。 は、結果の DataFrame を並べ替えるかどうかを示すブール値です。
Python でのさまざまなタイプの結合の使用方法を学ぶ
Python にはいくつかの結合オプションがあり、必要に応じて実行できます。結合タイプは次のとおりです。
1. 左結合
左結合は、最初のデータフレームの値をそのまま維持しながら、2 番目のデータフレームから一致する値を取り込みます。たとえば、b から一致する値を取り込みたい場合は、次のように定義できます。
c = a.join(b, how="left", lsuffix = "_left", rsuffix = "_right", sort = True)
print(c)
クエリを実行すると、出力には次の列参照が含まれます。
- ID_左
- 名前
- 名前
- ID_右
- 給料
この結合は、最初の DataFrame から最初の 3 列を取得し、2 番目の DataFrame から最後の 2 列を取得します。 lsuffix と rsuffix の値を使用して両方のデータセットの ID 列の名前を変更し、結果のフィールド名が一意になるようにしました。
出力は次のとおりです。
2. 右結合
右結合では、2 番目のデータフレームの値はそのまま維持され、最初のテーブルから一致する値が取り込まれます。たとえば、a から一致する値を取り込みたい場合は、次のように定義できます。
c = b.join(a, how="right", lsuffix = "_right", rsuffix = "_left", sort = True)
print(c)
出力は次のとおりです。
コードを確認すると、明らかな変更がいくつかあります。たとえば、結果には、最初のデータフレームの列の前に 2 番目のデータフレームの列が含まれます。
右結合を指定するには、how 引数に right の値を使用する必要があります。また、lsuffix と rsuffix の値を切り替えて、正しい結合の性質を反映する方法にも注目してください。
通常の結合では、右結合と比較して、左結合、内部結合、外部結合をより頻繁に使用することがあります。ただし、使用方法はデータ要件に完全に依存します。
3. 内部結合
内部結合は、両方の DataFrame から一致するエントリを配信します。結合ではインデックス番号を使用して行を照合するため、内部結合では一致する行のみが返されます。この図では、次の 2 つの DataFrame を使用してみましょう。
a = pd.DataFrame({"ID": ["001", "002", "003", "004", "005", "006", "007"],
"Fname": ["Ron", "John", "Helen", "Jenny", "Kenny", "Daryl", "Cathy"],
"Lname": ["Keith", "Harley", "Smith", "Kerr-Hislop", "Barber", "Hooper", "Hope"]})
b = pd.DataFrame({"ID": ["001", "002", "003", "004", "005"],
"Salary": [100000, 700000, 80000, 904750, 604772]})
print(a)
print(b)
出力は次のとおりです。
次のように内部結合を使用できます。
c = a.join(b, lsuffix="_left", rsuffix="_right", how='inner')
print(c)
結果の出力には、両方の入力データフレームに存在する行のみが含まれます。
4. 外部結合
外部結合は、両方の DataFrame からすべての値を返します。一致する値がない行の場合、個々のセルに null 値が生成されます。
上記と同じ DataFrame を使用した、外部結合のコードは次のとおりです。
c = a.join(b, lsuffix="_left", rsuffix="_right", how='outer')
print(c)
Python での結合の使用
結合は、対応する関数である merge や concat と同様、単純な結合機能以上の機能を提供します。一連のオプションと機能を考慮して、要件を満たすオプションを選択できます。
Python が提供する柔軟なオプションを使用すると、結合関数の有無にかかわらず、結果のデータセットを比較的簡単に並べ替えることができます。