Pandasのset_index関数は、DataFrameのインデックス(行ラベル)を指定した列に置き換えるための関数です。
これを理解して活用すると、データ処理や検索が効率的になり、グループ化や結合処理にも大きく役立ちます。以下で、詳しく解説します。
目次
基本構文
DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)
※このコード単体では、出力はできません。
主な引数
- keys
インデックスに設定する列名、または列名のリスト。
例:"column_name"または["col1", "col2"] - drop (デフォルト: True)
インデックスに設定した列をDataFrame本体から削除するかどうか。 True→ インデックスに設定した列は削除されるFalse→ 元の列を残したままインデックス化される- append (デフォルト: False)
既存のインデックスに加えて、新しい列を追加でインデックスにするかどうか。 True→ 現在のインデックスに列を追加してMultiIndexにするFalse→ 現在のインデックスを置き換える- inplace (デフォルト: False)
新しいDataFrameを返すか、その場で変更するか。 True→ 元のDataFrameを直接変更False→ 新しいDataFrameを返す- verify_integrity (デフォルト: False)
インデックスに重複がないかを検証する。 True→ 重複があるとエラーFalse→ 重複を許容(一般的にはこちら)
基本的な使い方
import pandas as pd
df = pd.DataFrame({
"id": [101, 102, 103],
"name": ["Alice", "Bob", "Charlie"],
"score": [85, 90, 95]
})
print(df)
例1: 単一列をインデックスにする
df_indexed = df.set_index("id")
print(df_indexed)
→ id列がインデックスとして利用される。
例2: drop=False で元の列を残す
df_indexed = df.set_index("id", drop=False)
print(df_indexed)
→ インデックスとしても使え、列としても保持できる。
例3: 複数列をインデックスにする
df_multi = df.set_index(["id", "name"])
print(df_multi)
→ MultiIndex(階層的インデックス)が設定される。
例4: append=True で既存のインデックスに追加する
df_append = df.set_index("id", append=True)
print(df_append)
→ もともとの「行番号」インデックスに「id」が追加され、二重インデックスになる。
reset_index との関係
set_indexでインデックスに変えた列は、reset_indexで元に戻せます。
df_indexed = df.set_index("id")
df_reset = df_indexed.reset_index()
print(df_reset)
→ 元の形に戻る。
よくある活用シーン
検索を効率化する
- IDやユニークキーをインデックスにすることで
locによる高速アクセスが可能。
print(df_indexed.loc[102])
データの整形
- 複数の属性(例: 年+月)をインデックスにすると、時系列やグループ分析がしやすい。
結合(merge/join)前処理
set_indexでキーを設定してからjoinを使うと直感的に結合できる。
注意点
- 重複がある列をインデックスにすると、検索時に複数行が返る
- verify_integrity=True を使えばエラーを出せるが、パフォーマンスは落ちる
inplace=Trueを乱用すると、元データが失われるのでおすすめしない(可読性低下)
まとめ
set_indexは「列を行ラベル(インデックス)」に変換するための関数- よく使うオプションは
drop,append - 検索、集計、結合の前処理にとても便利
reset_indexとセットで使うことが多い
以上、PythonのPandasのset_index関数についてでした。
最後までお読みいただき、ありがとうございました。
