データ分析や機械学習のためのデータ処理で、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の他にもデータ結合の方法としてjoinやconcatも用意されています。
merge
mergeは指定した列を基準にして結合するよ!
詳しくは記事を読んでみてね!
join
※現在、執筆中
まとめ
Pandasのconcat関数は、複数のデータフレームやシリーズを簡単に結合するための非常に便利なツールです。
行方向・列方向の結合方法や、外部結合・内部結合、さらにはマルチインデックスや重複チェックなど、データ処理のニーズに応じた柔軟な使い方ができます。
データを整理・統合する作業が多いデータ分析では、concatの活用が効率化のカギとなります。
この記事が理解で来たら次の記事へ行ってみよう!
コメント