Python – Pandas で 2 つのデータフレームを結合するにはどうすればよいですか?
現実の多くの状況では、使用したいデータは複数のファイルで提供されます。データを分析するために、これらのファイルを 1 つの DataFrame に結合する必要がよくあります。 Pandas は、結合 / マージ タイプの操作の場合、インデックスやリレーショナル代数機能用のさまざまな種類のセット ロジックとシリーズまたはデータフレームを簡単に組み合わせるための機能を提供します。複数のテーブルのデータを結合することもできます。 パンダ 。さらに、パンダは 2 つのシリーズまたはデータフレームを比較し、それらの違いを要約するユーティリティも提供します。
Pandas での DataFrame の連結
Pandas の concat() 関数は、ある DataFrame から別の DataFrame に列または行を追加するために使用されます。の パンダの concat() 関数 他の軸上でインデックス (存在する場合) のオプションのセット ロジック (和集合または交差) を実行しながら、軸に沿って連結操作を実行するという重労働をすべて実行します。
Python3
import> pandas as pd> # First DataFrame> df1> => pd.DataFrame({> 'id'> : [> 'A01'> ,> 'A02'> ,> 'A03'> ,> 'A04'> ],> > 'Name'> : [> 'ABC'> ,> 'PQR'> ,> 'DEF'> ,> 'GHI'> ]})> # Second DataFrame> df2> => pd.DataFrame({> 'id'> : [> 'B05'> ,> 'B06'> ,> 'B07'> ,> 'B08'> ],> > 'Name'> : [> 'XYZ'> ,> 'TUV'> ,> 'MNO'> ,> 'JKL'> ]})> frames> => [df1, df2]> result> => pd.concat(frames)> display(result)> |
出力:
id Name 0 A01 ABC 1 A02 PQR 2 A03 DEF 3 A04 GHI 0 B05 XYZ 1 B06 TUV 2 B07 MNO 3 B08 JKL
Pandas での DataFrame の結合
DataFrame を連結するときは、単に DataFrame を相互に追加するだけです。つまり、DataFrame を垂直方向または横方向に積み重ねます。 DataFrame を結合するもう 1 つの方法は、共通の値 (共通の一意の ID) を含む各データセット内の列を使用することです。共通フィールドを使用して DataFrame を結合することを結合と呼びます。共通の値を含む列は結合キーと呼ばれます。この方法で DataFrame を結合すると、一方の DataFrame が、もう一方の DataFrame に含めたい追加データを含むルックアップ テーブルである場合に便利です。
注記: テーブルを結合するこのプロセスは、テーブルを結合するプロセスと似ています。 SQLデータベース 。
複数の DataFrame を結合する場合、(連結されている軸以外の) 他の軸を処理する方法を選択できます。これは次の 2 つの方法で実行できます。
- それらすべてを結合して、join='outer' とします。これは情報損失がゼロであるため、デフォルトのオプションです。
- 交差点を進み、join='inner' と入力します。
例: concat() メソッドを使用した 2 つのデータフレームの内部結合
この例では、2 つのパンダ DataFrames、 df1> そして df3> 、インデックスに基づいて内部結合を使用して連結されます。結果として得られる「result」という名前のデータフレームには、「id」列が含まれる行のみが含まれます。 df1> の「City」列と一致します df3> 。
Python3
import> pandas as pd> df1> => pd.DataFrame({> 'id'> : [> 'A01'> ,> 'A02'> ,> 'A03'> ,> 'A04'> ],> > 'Name'> : [> 'ABC'> ,> 'PQR'> ,> 'DEF'> ,> 'GHI'> ]})> df3> => pd.DataFrame({> 'City'> : [> 'MUMBAI'> ,> 'PUNE'> ,> 'MUMBAI'> ,> 'DELHI'> ],> > 'Age'> : [> '12'> ,> '13'> ,> '14'> ,> '12'> ]})> # the default behaviour is join='outer'> # inner join> result> => pd.concat([df1, df3], axis> => 1> , join> => 'inner'> )> display(result)> |
出力:
id Name City Age 0 A01 ABC MUMBAI 12 1 A02 PQR PUNE 13 2 A03 DEF MUMBAI 14 3 A04 GHI DELHI 12
append()関数を使用した連結
concat() への便利なショートカットは、Series および DataFrame の append() インスタンス メソッドです。このメソッドは、Pandas の複数のテーブルのデータを結合するために使用できます。これらのメソッドは、実際には concat よりも前から存在していました。
例 1: append() メソッドを使用した 2 つのデータフレームの結合
この例では、2 つの Pandas DataFrames、 df1> そして df2> 、を使用して結合されます。 append> メソッドを実行すると、「result」という名前の新しいデータフレームが生成されます。結果の DataFrame には、両方の行がすべて含まれます。 df1> そして df2> 、連続インデックス付き。
Python3
import> pandas as pd> # First DataFrame> df1> => pd.DataFrame({> 'id'> : [> 'A01'> ,> 'A02'> ,> 'A03'> ,> 'A04'> ],> > 'Name'> : [> 'ABC'> ,> 'PQR'> ,> 'DEF'> ,> 'GHI'> ]})> # Second DataFrame> df2> => pd.DataFrame({> 'id'> : [> 'B05'> ,> 'B06'> ,> 'B07'> ,> 'B08'> ],> > 'Name'> : [> 'XYZ'> ,> 'TUV'> ,> 'MNO'> ,> 'JKL'> ]})> # append method> result> => df1.append(df2)> display(result)> |
出力:
id Name 0 A01 ABC 1 A02 PQR 2 A03 DEF 3 A04 GHI 0 B05 XYZ 1 B06 TUV 2 B07 MNO 3 B08 JKL
注記: append() は、複数のオブジェクトを連結することができます。
例 2: Pandas の複数のテーブルのデータを結合する
この例では、3 つの Pandas DataFrames、 df1> 、 df2> 、 そして df3> 、を使用して一緒に追加されます。 append> 方法。結果として得られる「result」という名前のデータフレームは、3 つのデータフレームのすべての行を結合し、連続インデックスを維持します。
Python3
import> pandas as pd> # First DataFrame> df1> => pd.DataFrame({> 'id'> : [> 'A01'> ,> 'A02'> ,> 'A03'> ,> 'A04'> ],> > 'Name'> : [> 'ABC'> ,> 'PQR'> ,> 'DEF'> ,> 'GHI'> ]})> # Second DataFrame> df2> => pd.DataFrame({> 'id'> : [> 'B05'> ,> 'B06'> ,> 'B07'> ,> 'B08'> ],> > 'Name'> : [> 'XYZ'> ,> 'TUV'> ,> 'MNO'> ,> 'JKL'> ]})> df3> => pd.DataFrame({> 'City'> : [> 'MUMBAI'> ,> 'PUNE'> ,> 'MUMBAI'> ,> 'DELHI'> ],> > 'Age'> : [> '12'> ,> '13'> ,> '14'> ,> '12'> ]})> # appending multiple DataFrame> result> => df1.append([df2, df3])> display(result)> |
出力:
id Name City Age 0 A01 ABC NaN NaN 1 A02 PQR NaN NaN 2 A03 DEF NaN NaN 3 A04 GHI NaN NaN 0 B05 XYZ NaN NaN 1 B06 TUV NaN NaN 2 B07 MNO NaN NaN 3 B08 JKL NaN NaN 0 NaN NaN MUMBAI 12 1 NaN NaN PUNE 13 2 NaN NaN MUMBAI 14 3 NaN NaN DELHI 12