データ分析において、複数のデータを結合することは非常に重要な作業です。Pandasライブラリは、データフレームを結合するための機能を豊富に備えています。この記事では、Pandasを使ったデータフレームの結合方法について、concatとappendの2つの関数を紹介します。
はじめに
concatとappendは、Pandasのデータフレームを結合するための2つの関数です。それぞれどのような場面で使い分けるべきか、またそれぞれの使い方について詳しく解説します。
concatの使い方
concatは、データフレームを縦方向または横方向に結合するための関数です。以下は、concatの基本的な使い方です。
import pandas as pd df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}) df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'], 'B': ['B4', 'B5', 'B6', 'B7'], 'C': ['C4', 'C5', 'C6', 'C7'], 'D': ['D4', 'D5', 'D6', 'D7']}) # 縦方向に結合する result = pd.concat([df1, df2]) print(result) # 横方向に結合する result = pd.concat([df1, df2], axis=1) print(result)
上記のコードは、2つのデータフレームdf1とdf2を縦方向に結合する方法と横方向に結合する方法を示しています。axis=0を指定すると縦方向に、axis=1を指定すると横方向に結合することができます。
また、concatでは、様々なオプションを使って結合方法をカスタマイズすることができます。以下は、その一例です。
- join:内部結合(inner)、外部結合(outer)のどちらを行うかを指定します。デフォルトはouterです。
- keys:結合後のデータフレームに、元のデータフレームのどちらから来たかを示すキーを付与します。
- ignore_index:Trueを指定すると、結合後のデータフレームのインデックスを連番に振り直します。
以下は、これらのオプションを使った結合の例です。
import pandas as pd df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]}) df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': [5, 6, 7, 8]}) # キーによる内部結合 result = pd.concat([df1, df2], join='inner', keys=['df1', 'df2']) print(result) # キーによる外部結合 result = pd.concat([df1, df2], join='outer', keys=['df1', 'df2']) print(result) # インデックスの振り直し result = pd.concat([df1, df2], ignore_index=True) print(result)
上記のコードでは、df1とdf2をキーによる内部結合、外部結合、インデックスの振り直しを行っています。これらのオプションを使うことで、より複雑なデータフレームの結合を行うことができます。
appendの使い方
appendは、データフレームを縦方向に結合するための関数です。以下は、appendの基本的な使い方です。
import pandas as pd df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}) df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'], 'B': ['B4', 'B5', 'B6', 'B7'], 'C': ['C4', 'C5', 'C6', 'C7'], 'D': ['D4', 'D5', 'D6', 'D7']}) # 縦方向に結合する result = df1.append(df2) print(result)
上記のコードは、2つのデータフレームdf1とdf2を縦方向に結合する方法を示しています。appendを使うことで、簡単にデータフレームを結合することができます。
しかし、注意しなければなり、appendは元のデータフレームを変更せずに新しいデータフレームを作成するため、結合が複数回行われる場合は、処理に時間がかかることがあります。そのため、大量のデータを扱う場合は、concatを使うことが推奨されます。
concatとappendの違い
concatとappendは、どちらもデータフレームを結合するための関数ですが、以下のような違いがあります。
concat | append | |
---|---|---|
結合方法 | 縦方向または横方向 | 縦方向 |
元のデータフレームの変更 | 変更されない | 変更されない |
複数回結合する場合の効率性 | 高い | 低い |
concatは、縦方向または横方向のどちらでも結合できます。また、結合方法をカスタマイズするオプションが多数用意されているため、複雑な結合も行うことができます。一方、appendは縦方向の結合のみを行い、元のデータフレームを変更せずに新しいデータフレームを作成するため、複数回結合する場合は処理に時間がかかることがあります。
実践例
以下は、concatとappendを使ったデータフレームの結合の実践例です。
import pandas as pd # データの作成 df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']}) df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'], 'B': ['B4', 'B5', 'B6', 'B7'], 'C': ['C4', 'C5', 'C6', 'C7'], 'D': ['D4', 'D5', 'D6', 'D7']}) df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'], 'B': ['B8', 'B9', 'B10', 'B11'], 'C': ['C8', 'C9', 'C10', 'C11'], 'D': ['D8', 'D9', 'D10', 'D11']}) # concatで縦方向に結合 result1 = pd.concat([df1, df2, df3], ignore_index=True) print(result1) # concatで横方向に結合 result2 = pd.concat([df1, df2, df3], axis=1) print(result2) # appendで縦方向に結合 result3 = df1.append(df2) result3 = result3.append(df3) print(result3)
上記のコードでは、3つのデータフレームをconcatとappendを使って結合しています。結合後のデータフレームをprint文で出力しています。
Pandasでデータ結合を行う際のconcatとappendの使い方と選択のポイント
Pandasでデータフレームの結合を行う際には、以下のポイントを抑えておくことが重要です。
- 縦方向の結合はappendでもconcatでもOK、横方向の結合はconcatを使う。
- 複数回結合する場合は、concatを使う。
- concatでは、join、keys、ignore_indexなどのオプションを使って、結合方法をカスタマイズすることができる。
まとめ
Pandasライブラリを使えば、複数のデータフレームを簡単に結合することができます。本記事では、その中でも代表的な2つの関数であるconcatとappendの使い方について解説しました。どちらの関数も使い分けが必要ですが、横方向の結合はconcatを使うようにしましょう。