Pandasで列名を変更する方法
Updated on
Pandasでデータをクレンジングしたり整理したりするときに、最もよく行う作業のひとつが列名の変更です。
わかりやすく説明的な列名にすることで、DataFrameの可読性が大きく向上し、その後の分析もスムーズになります。
この2025年版のガイドでは、Pandasで列名を変更する主要なすべての方法を、ベストプラクティスや例、ありがちな落とし穴と一緒に解説します。
グラフを自分で書かずに、Pandas DataFrameを高速に探索・可視化したいですか?
PyGWalker を使えば、任意の DataFrame を Tableau スタイルのビジュアル探索UIに変換できます。 こちらから試せます: https://github.com/Kanaries/pygwalker (opens in a new tab)
📌 Pandasで列名を変更するとは?
列名の変更とは、単純に DataFrame 内の1つ以上の列ラベルを別の名前に変えること を意味します。
次のような場面で役に立ちます。
- 列名がわかりにくい、または一貫性がない
- 空白文字や特殊文字、タイプミスが含まれている
- 結合やモデリングのために列名を標準化したい
- プレゼンテーションや可視化用に、人間にとってわかりやすいラベルにしたい
Pandas には、用途に応じて使い分けられる複数の便利な列名変更方法があります。
🔧 Pandasで列名を変更する方法(まとめ)
以下に、よく使われる代表的な方法を紹介します。
✅ 1. rename() で単一の列名を変更する
最も安全で、意図が明確な方法です。
import pandas as pd
df = pd.DataFrame({
'Name': ['John', 'Alex', 'Peter'],
'Age': [25, 24, 28],
'Gender': ['Male', 'Male', 'Male']
})
df = df.rename(columns={'Age': 'Years'})
print(df)出力:
Name Years Gender
0 John 25 Male
1 Alex 24 Male
2 Peter 28 Male✅ 2. rename() で複数の列名を一度に変更する
より大きな辞書を渡すだけです。
df = df.rename(columns={
'Age': 'Years',
'Gender': 'Sex'
})この方法なら、列順が意図せず変わってしまうことを防ぎつつ、インデックスもそのまま維持できます。
✅ 3. df.columns = [...] ですべての列名を一括変更する
すべての新しい列名を把握しているときに便利です。
df.columns = ['ID', 'Years', 'Dept']⚠️ 重要: リストの長さは、DataFrame の列数と一致している必要があります。
✅ 4. set_axis() で列名を変更する(関数型スタイル)
inplace=True を指定しない限り、新しい DataFrame を返すメソッドです。
df = df.set_axis(['A', 'Years', 'B'], axis=1)柔軟ではありますが、単純な列名変更だけの用途ではあまり一般的ではありません。
✅ 5. リスト内包表記で動的に列名を変更する
大量の列名を一括で整形したいときに最適です。
df.columns = [col.replace('_', ' ').title() for col in df.columns]自動的なクリーンアップにとても便利です。
- すべて小文字に揃える
- 空白を取り除く
- プレフィックスやサフィックスを付与する
例:
df.columns = [col.lower() for col in df.columns]
df.columns = [f"user_{col}" for col in df.columns]✅ 6. 列インデックスで列名を変更する
列のインデックスを使ったリネームはあまり使いませんが、サポートされています。
df = df.rename(columns={2: 'Dept'})列名が不明・重複・動的に生成されるなど、名前ベースで指定しにくい場合に役立ちます。
🧠 列名変更のベストプラクティス
✔ 明示性のために rename() を優先する
rename() は何を変更しているかが明確で、意図しない挙動も起こりにくいです。
✔ すべての列名を変える場合以外は df.columns を直接いじらない
リストごと差し替える方法は高速ですが、列数の不一致があるとエラーになり、ミスに気づきにくい場合があります。
✔ クリーンなデータパイプラインには「小文字 + アンダースコア」が便利
df.columns = [c.lower().replace(' ', '_') for c in df.columns]多くのプロジェクトやチームで採用されている、機械処理向きの命名スタイルです。
✔ inplace=True の使用は避ける
Pandas のガイドラインとして、inplace=True はパフォーマンス面で利点がないとされています。
⚡ クイックチートシート
df.rename(columns={'old': 'new'})
df.columns = ['A', 'B', 'C']
df = df.set_axis(['A', 'B', 'C'], axis=1)
df.columns = [col.lower() for col in df.columns]
df.rename(columns={2: 'new_name'})🏁 まとめ
列名の変更は、一見シンプルですが、分析用の DataFrame を整えるうえで欠かせない作業です。Pandas には、rename() を使った明示的な方法から、リスト内包表記による一括整形まで、複数のやり方が用意されています。
特におすすめの使い分けは次の通りです。
- 特定の列だけ変更したいときは
rename() - 全列を新しい名前に置き換えるときは
df.columns = [...] - ルールに基づく一括変換には リスト内包表記
- 名前で指定しづらいときだけ インデックスベースのリネーム
これらを使いこなせば、データを常にクリーンで一貫性のある状態に保ち、扱いやすい DataFrame を維持できます。
🔗 関連チュートリアル
- Dict to DataFrame in Pandas
- Add a Column to a DataFrame in Pandas
- Sort DataFrame in Pandas
- Creating an Empty DataFrame in Pandas
❓ よくある質問
1. Pandasで列名を変更するにはどうすればいいですか?
rename() を使います。
df.rename(columns={'old': 'new'})2. 列インデックスで列名を変更するには?
df.rename(columns={0: 'id'})3. すべての列名を一度に変更するには?
df.columns = ['A', 'B', 'C']