この記事ではpandasライブラリにおけるDataFrameを連結(concat)する方法を具体的に解説します。
サンプルコードをコピペしながらサクサク処理を試せますので、 ぜひ活用してみてください。
pandasのDataFrame結合
pandasにおいてDataFrameを結合する方法は大きく3種類存在します。
DataFrameを連結
pd.concat()
この記事ではpd.concat()での結合方法を具体的に紹介します。
pd.concat()の使い方
pd.concat()では複数のDataFrameを連結して結合します。
引数objsに連結するDataFrameをリストもしくはタプルに入れて指定します。(objs=は省略するのが一般的)
import pandas as pd
# 2つのDataFrameを作成
df1 = pd.DataFrame({"col_a": ["a", "aa", "A", "AA", "aA"], "col_b": ["b", "bb", "B", "BB", "bB"], "col_c": ["c", "cc", "C", "CC", "cC"]})
df2 = pd.DataFrame({"col_c": ["c", "cc", "C", "CC", "cC"], "col_d": ["d", "dd", "D", "DD", "dD"], "col_e": ["e", "ee", "E", "EE", "eE"]})
# df1とdf2を連結
df3 = pd.concat(objs=[df1, df2])
複数のDataFrameを共通の列名で結合して、縦方向(デフォルト)に連結します。
連結の軸方向を指定(axis)
デフォルトでは縦方向に結合しますが、横方向の連結が可能です。
引数axis=1を指定することで横方向に連結します。縦方向(デフォルト)は引数axis=0です。
import pandas as pd
# 2つのDataFrameを作成
df1 = pd.DataFrame({"col_a": ["a", "aa", "A", "AA", "aA"], "col_b": ["b", "bb", "B", "BB", "bB"], "col_c": ["c", "cc", "C", "CC", "cC"]})
df2 = pd.DataFrame({"col_c": ["c", "cc", "C", "CC", "cC"], "col_d": ["d", "dd", "D", "DD", "dD"], "col_e": ["e", "ee", "E", "EE", "eE"]})
# 横方向に連結(axis=1)
df3 = pd.concat([df1, df2], axis=1)
横方向に連結する場合、インデックスをキーとして共通の値を持つ列を結合します。
結合方法の指定(join)
連結するDataFrameのすべての値を結合(外部結合)するか、共通部分のみを結合(内部結合)するか指定できます。
外部結合

内部結合

結合方法を指定するには引数joinを指定します。デフォルトは引数join="outer"で外部結合です。
外部結合
import pandas as pd
# 2つのDataFrameを作成
df1 = pd.DataFrame({"col_a": ["a", "aa", "A", "AA", "aA"], "col_b": ["b", "bb", "B", "BB", "bB"], "col_c": ["c", "cc", "C", "CC", "cC"]})
df2 = pd.DataFrame({"col_c": ["c", "cc", "C", "CC", "cC"], "col_d": ["d", "dd", "D", "DD", "dD"], "col_e": ["e", "ee", "E", "EE", "eE"]})
# 外部結合(デフォルト)
df3 = pd.concat([df1, df2], join="outer")
すべての値を結合して、共通しない部分はNaN(Not a Number)で埋められます。
内部結合
内部結合は引数join="inner"を指定します。
import pandas as pd
# 2つのDataFrameを作成
df1 = pd.DataFrame({"col_a": ["a", "aa", "A", "AA", "aA"], "col_b": ["b", "bb", "B", "BB", "bB"], "col_c": ["c", "cc", "C", "CC", "cC"]})
df2 = pd.DataFrame({"col_c": ["c", "cc", "C", "CC", "cC"], "col_d": ["d", "dd", "D", "DD", "dD"], "col_e": ["e", "ee", "E", "EE", "eE"]})
# 内部結合(join="inner")
df3 = pd.concat([df1, df2], join="inner")
連結するDataFrameの共通する列名の値だけが結合されます。
インデックスを無視(ignore_index)
引数ignore_index=Trueを指定すると、DataFrameを連結後、連結の軸方向のインデックスを無視して0から値を振り直します。(デフォルトはFalse)
連結方向が縦方向の場合はDataFrameインデックスが、横方向の場合はDataFrameの列名が結合後に無視されて新しく0から順に値が振られます。
連結が縦方向
import pandas as pd
# 2つのDataFrameを作成
df1 = pd.DataFrame({"col_a": ["a", "aa", "A", "AA", "aA"], "col_b": ["b", "bb", "B", "BB", "bB"], "col_c": ["c", "cc", "C", "CC", "cC"]})
df2 = pd.DataFrame({"col_c": ["c", "cc", "C", "CC", "cC"], "col_d": ["d", "dd", "D", "DD", "dD"], "col_e": ["e", "ee", "E", "EE", "eE"]})
# 連結後、縦方向のインデックスを無視(ignore_index=True)
df3 = pd.concat([df1, df2], ignore_index=True, axis=0)
結合後のDataFrameインデックスが0から順に振られています。
連結が横方向
import pandas as pd
# 2つのDataFrameを作成
df1 = pd.DataFrame({"col_a": ["a", "aa", "A", "AA", "aA"], "col_b": ["b", "bb", "B", "BB", "bB"], "col_c": ["c", "cc", "C", "CC", "cC"]})
df2 = pd.DataFrame({"col_c": ["c", "cc", "C", "CC", "cC"], "col_d": ["d", "dd", "D", "DD", "dD"], "col_e": ["e", "ee", "E", "EE", "eE"]})
# df1とdf2を連結
df3 = pd.concat([df1, df2], ignore_index=True, axis=1)
結合後のDataFrameの列名が0から順に値が振り直されています。
元のDataFrameの判別ラベルを付与(keys)
連結した後のDataFrameのインデックスに元のDataFrameのラベルをつけることができます。
引数keysに元のDataFrameを指すラベルを指定します。
連結が縦方向の場合はDataFrameインデックスの左に、横方向の場合はDataFrameの列名の上にラベルが表示されます。
連結が縦方向
import pandas as pd
# 2つのDataFrameを作成
df1 = pd.DataFrame({"col_a": ["a", "aa", "A", "AA", "aA"], "col_b": ["b", "bb", "B", "BB", "bB"], "col_c": ["c", "cc", "C", "CC", "cC"]})
df2 = pd.DataFrame({"col_c": ["c", "cc", "C", "CC", "cC"], "col_d": ["d", "dd", "D", "DD", "dD"], "col_e": ["e", "ee", "E", "EE", "eE"]})
# 元のDataFrameの判別ラベルを付与
df3 = pd.concat([df1, df2], keys=["No.1", "No.2"])
引数keysに指定した値がDataFrameインデックスの左に表示されます。
連結が横方向
import pandas as pd
# 2つのDataFrameを作成
df1 = pd.DataFrame({"col_a": ["a", "aa", "A", "AA", "aA"], "col_b": ["b", "bb", "B", "BB", "bB"], "col_c": ["c", "cc", "C", "CC", "cC"]})
df2 = pd.DataFrame({"col_c": ["c", "cc", "C", "CC", "cC"], "col_d": ["d", "dd", "D", "DD", "dD"], "col_e": ["e", "ee", "E", "EE", "eE"]})
# 元のDataFrameの判別ラベルを付与
df3 = pd.concat([df1, df2], keys=["No.1", "No.2"], axis=1)
引数keysに指定した値がDataFrame列名の上に表示されます。
まとめ
今回はpandasのDataFrameを連結(concat)する方法を具体的に紹介しました。
複数のDataFrameを扱う際はとても便利ですので、ぜひ活用してみてください。



