pandas.concat の axis パラメータは、「どの方向に連結するか」 を決める非常に重要な引数です。
axis=0 と axis=1 の違いを中心に、詳しく整理して説明します。
目次
基本構文
import pandas as pd
pd.concat([df1, df2], axis=0) # 行方向に連結
pd.concat([df1, df2], axis=1) # 列方向に連結
※このコード単体では、出力はできません。
objs: 連結するDataFrameまたはSeriesのリストや辞書axis: 0(行方向)か 1(列方向)- デフォルトは
axis=0(行方向)
axis=0(行方向に連結)
- デフォルトの動作。
df1の下にdf2を積み重ねるイメージ。- インデックスがそのまま残るので、重複する可能性がある。
- 列名が一致していない場合、その列には
NaNが入る。
例
import pandas as pd
df1 = pd.DataFrame({"A": [1, 2], "B": [3, 4]})
df2 = pd.DataFrame({"A": [5, 6], "B": [7, 8]})
print(pd.concat([df1, df2], axis=0))
インデックスがそのままなので、必要に応じて ignore_index=True を指定する。
pd.concat([df1, df2], axis=0, ignore_index=True)
axis=1(列方向に連結)
df1とdf2を横に並べるイメージ。- 行インデックスに基づいて結合するため、インデックスが揃っていないと
NaNが生じる。
例
df1 = pd.DataFrame({"A": [1, 2]}, index=["x", "y"])
df2 = pd.DataFrame({"B": [3, 4]}, index=["y", "z"])
print(pd.concat([df1, df2], axis=1))
行インデックスを基準に結合するため、SQL の「外部結合」に近い挙動になる。
axis の使い分けまとめ
axis=0: データを縦に積み重ねる(レコード追加したいとき)axis=1: データを横に結合する(新しい特徴量・列を追加したいとき)
関連オプション
ignore_index=True: 行方向結合時にインデックスを振り直すkeys=["df1", "df2"]: どのデータから来たか分かるように階層化インデックスをつけるjoin="inner": 共通部分だけ残す(デフォルトは"outer"で和集合)
concat と merge / join の違い
concat: 単純に縦横にくっつけるmerge: SQL のJOINに近い(キーを指定して結合)join: インデックスをキーに結合(mergeのインデックス版)
まとめ
axis=0→ 縦方向に積む(データ追加)axis=1→ 横方向に並べる(特徴量追加)
という使い分けになります。
以上、PythonのPandasのconcat axisについてでした。
最後までお読みいただき、ありがとうございました。
