Pandas concatを徹底解説!データフレームを効率的に結合・追加する方法と実践例

Pandas

データ分析や機械学習のためのデータ処理で、Pythonライブラリ「Pandas」は非常に多くの機能を提供してくれます。

特に、データフレームの結合連結はデータ処理の基本的なタスクの一つです。

この記事では、Pandasのconcat関数を使ったデータの結合や追加方法をわかりやすく解説し、具体例を交えながら効果的な使い方を学んでいきましょう。

concat関数とは?

concat関数は、複数のデータフレーム(DataFrame)やシリーズ(Series)を

行方向または列方向に結合するためのPandasの関数です。

concatの基本的な使い方

concatの基本的な構文

pd.concat(objs, axis=0, join='outer', ignore_index=False, keys=None)
ゆーや
ゆーや

主なパラメータは、以下の通りです!

objs:結合したいデータフレームやシリーズをリスト形式で指定します。例:[df1, df2]
axis:結合の方向を指定します。0で行方向(デフォルト)、1で列方向に結合。
join:結合方法を指定します。’outer’(外部結合)か’inner’(内部結合)が選べます。デフォルトは’outer’。
ignore_index:Trueにするとインデックスがリセットされ、新しいデータフレームで連番のインデックスが振られます。デフォルトはFalse。
keys:指定すると、結合されたデータフレームに階層的なインデックス(マルチインデックス)が追加されます。

concatを使った様々な結合方法

デフォルト

import pandas as pd

# データフレームの定義
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})

# 結合
result = pd.concat([df1, df2])
# 出力
print(result)
ゆーや
ゆーや

デフォルトでは「行方向(行が増える形で)」に結合されるよ!

インデックス(0,1,0,1)もそれぞれのものを残したままになるよ!

列方向の結合(axis=1)

列方向にデータフレームを結合する場合、axis=1を指定します。

import pandas as pd

# データフレームの定義
df1 = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [24, 27]})
df2 = pd.DataFrame({'City': ['New York', 'Los Angeles'], 'Country': ['USA', 'USA']})

# 結合
result = pd.concat([df1, df2], axis=1)
# 出力
print(result)
ゆーや
ゆーや

axis=1とすれば、「列方向(列が増える形で)」に結合されるよ!

結合方法の指定(join)

異なる列が存在するデータフレームを結合する際、joinパラメータを使うことでデータの結合方法を指定できます。

デフォルトは’outer’(外部結合)ですが、‘inner’(内部結合)を指定することで共通の列のみを含めることも可能です。

import pandas as pd

# データフレームの定義
df1 = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [24, 27]})
df2 = pd.DataFrame({'City': ['New York', 'Los Angeles', 'Tokyo'], 'Country': ['USA', 'USA', 'JAPAN']})

# 結合
result = pd.concat([df1, df2], axis=1)
# 出力
print(result)
ゆーや
ゆーや

合わない場合は、NaNで埋めているのでデフォルトは外部結合ということがわかるね!

import pandas as pd

# データフレームの定義
df1 = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [24, 27]})
df2 = pd.DataFrame({'City': ['New York', 'Los Angeles', 'Tokyo'], 'Country': ['USA', 'USA', 'JAPAN']})

# 結合
result = pd.concat([df1, df2], axis=1, join='inner')
# 出力
print(result)
ゆーや
ゆーや

joinにinnerを指定した場合、結合しきれないデータは削除されているね!

まさしく、内部結合の動作だね!

インデックスのリセット(ignore_index)

Trueにするとインデックスがリセットされ、新しいデータフレームで連番のインデックスが振られます。

デフォルトはFalseです。

import pandas as pd

# データフレームの定義
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})

# 結合
result = pd.concat([df1, df2], ignore_index=True)
# 出力
print(result)
ゆーや
ゆーや

0,1,0,1だったインデックスが0~3まで順番に設定されているね!

ラベルの追加(keys)

異なるデータセットを一つにまとめる際、どのデータフレームから来たデータか区別するためにkeysパラメータが便利です。

keysを使うと、結果が階層的なインデックス(マルチインデックス)を持つようになります。

import pandas as pd

# データフレームの定義
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})

# 結合
result = pd.concat([df1, df2], keys=['first', 'second'])
# 出力
print(result)
ゆーや
ゆーや

どのデータから来た行かが一目で分かる構造になったね!

concatとjoinやmergeの違い

Pandasには、concatの他にもデータ結合の方法としてjoinconcatも用意されています。

merge

mergeは指定した列を基準にして結合するよ!

詳しくは記事を読んでみてね!

join

※現在、執筆中

まとめ

Pandasのconcat関数は、複数のデータフレームやシリーズを簡単に結合するための非常に便利なツールです。

行方向・列方向の結合方法や、外部結合・内部結合、さらにはマルチインデックスや重複チェックなど、データ処理のニーズに応じた柔軟な使い方ができます。

データを整理・統合する作業が多いデータ分析では、concatの活用が効率化のカギとなります。

ゆーや
ゆーや

この記事が理解で来たら次の記事へ行ってみよう!

コメント

タイトルとURLをコピーしました