はじめに:縦方向にデータを結合する利点とシーン
PandasはPythonのデータ分析ライブラリであり、様々なデータの集計・加工・分析を行うことができます。その中でも、複数のデータを結合する際にはconcat関数が用いられます。本記事では、concat関数を用いた縦方向にデータを結合する方法について解説します。
縦方向にデータを結合することで、複数のデータを一つのデータフレームにまとめることができます。例えば、複数のCSVファイルを読み込んでデータを加工したい場合や、異なるデータソースからのデータを結合したい場合には、縦方向にデータを結合することが必要となります。
concat関数の基本構文:縦方向にデータを結合する基本操作
concat関数は、複数のデータフレームを結合する際に使用されます。基本的な使い方は以下の通りです。
import pandas as pd # データフレームの作成 df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df2 = pd.DataFrame({'A': [4, 5, 6], 'B': [7, 8, 9]}) # 縦方向にデータを結合 result = pd.concat([df1, df2])
上記の例では、df1とdf2の2つのデータフレームをconcat関数を用いて縦方向に結合しています。結合結果はresultに格納されます。実行結果は以下の通りです。
A B 0 1 4 1 2 5 2 3 6 0 4 7 1 5 8 2 6 9
縦方向に結合する場合、引数に結合するデータフレームをリスト形式で渡す必要があります。また、concat関数は元のデータフレームを変更するのではなく、新たなデータフレームを生成します。そのため、元のデータフレームに変更を加えることがないため、安心して結合処理を行うことができます。
concat関数のオプション:ignore_indexやaxisの使い方
concat関数にはいくつかのオプションがあります。ここでは、ignore_indexとaxisの使い方について解説します。
ignore_index
ignore_indexオプションは、縦方向にデータを結合する際に、元のデータフレームのインデックスを無視して、新たなインデックスを付与することができます。引数にTrueを渡すことで、新たなインデックスが付与されます。
import pandas as pd # データフレームの作成 df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=[0, 1, 2]) df2 = pd.DataFrame({'A': [4, 5, 6], 'B': [7, 8, 9]}, index=[3, 4, 5]) # 縦方向にデータを結合(ignore_index=True) result = pd.concat([df1, df2], ignore_index=True)
上記の例では、ignore_index=Trueを指定しています。結合結果はresultに格納されます。実行結果は以下の通りです。
A B 0 1 4 1 2 5 2 3 6 3 4 7 4 5 8 5 6 9
インデックスが0から5までの通し番号になっていることがわかります。
axis
axisオプションは、縦方向にデータを結合する場合には0を、横方向にデータを結合する場合には1を指定します。デフォルトは0です。
import pandas as pd # データフレームの作成 df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]}) # 横方向にデータを結合 result = pd.concat([df1, df2], axis=1)
上記の例では、axis=1を指定しています。結合結果はresultに格納されます。実行結果は以下の通りです。
A B C D 0 1 4 7 10 1 2 5 8 11 2 3 6 9 12
df1とdf2が横方向に結合されていることがわかります。
実例1:複数のデータフレームを縦方向に結合して解析する
複数のデータフレームを縦方向に結合して解析する場合について、具体的な例を紹介します。
例として、3つのCSVファイルを読み込んで、それぞれの最大値を計算し、縦方向に結合して一覧表を作成することを考えます。以下のようなCSVファイルがあるとします。
file1.csv |
---|
A,B 1,2 3,4 |
file2.csv |
A,B 5,6 7,8 |
file3.csv |
A,B 9,10 11,12 |
以下のように、CSVファイルを読み込み、最大値を計算して、縦方向に結合します。
import pandas as pd import glob # ファイル一覧の取得 files = glob.glob("file*.csv") # データフレームの作成と最大値の計算 dfs = [] for file in files: df = pd.read_csv(file) df_max = pd.DataFrame(df.max()).T dfs.append(df_max) # 縦方向にデータを結合 result = pd.concat(dfs) print(result)
実行結果は以下の通りです。
A B C 0 3 4.0 NaN 0 7 NaN 8.0 0 11 NaN 12.0
最大値が縦方向に結合されて一覧表が作成されました。
実例2:同じカラム名を持つ異なるデータソースからのデータ結合
異なるデータソースからのデータを結合する際には、同じカラム名を持つデータフレームの結合が必要となります。
import pandas as pd # データフレームの作成 df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df2 = pd.DataFrame({'A': [4, 5, 6], 'C': [7, 8, 9]}) # 縦方向にデータを結合 result = pd.concat([df1, df2], join='inner') print(result)
join=’inner’を指定することで、カラム名が重複している場合には、共通しているカラムのみを結合することができます。実行結果は以下の通りです。
A 0 1 1 2 2 3 0 4 1 5 2 6
共通しているカラムであるAのみが結合されていることがわかります。
まとめ:Pandasで縦方向にデータを結合する際のポイントと注意点
Pandasのconcat関数を用いて、複数のデータフレームを縦方向に結合する方法について解説しました。縦方向にデータを結合することで、複数のデータを一つのデータフレームにまとめることができます。また、ignore_indexやaxisオプションを用いることで、より柔軟に結合処理を行うことができます。最後に、同じカラム名を持つデータフレームの結合には注意が必要であることを紹介しました。
本記事を参考にして、Pandasで縦方向にデータを結合する際のポイントと注意点を抑え、データ分析に役立ててください。