【Python】Pandasで縦方向にデータを結合する方法!concat関数の使い方を解説

はじめに:縦方向にデータを結合する利点とシーン

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で縦方向にデータを結合する際のポイントと注意点を抑え、データ分析に役立ててください。