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