Pandas DataFrameの行名・列名を変更する方法【完全ガイド】
Pandasを使ってデータ分析を行う際、DataFrameの行名(インデックス)や列名を変更したいケースは非常によくあります。この記事では、Pandas DataFrameの行名・列名を効率的に変更するための様々な方法を、実践的なサンプルコードとともに詳しく解説します。
基本的な準備とサンプルデータの作成
まず、この記事で使用するサンプルDataFrameを作成しましょう。
import pandas as pd
# サンプルデータの作成
df = pd.DataFrame({
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3': [7, 8, 9]
}, index=['row1', 'row2', 'row3'])
print(df)
このコードを実行すると、以下のようなDataFrameが作成されます:
col1 col2 col3
row1 1 4 7
row2 2 5 8
row3 3 6 9
列名を変更する方法
columnsプロパティで一括変更
最もシンプルな方法は、columnsプロパティに新しい列名のリストを直接代入することです。
# 全ての列名を一括変更
df.columns = ['A', 'B', 'C']
print(df)
この方法は全ての列名を同時に変更したい場合に適しています。ただし、列の数と新しい名前の数が一致している必要があります。
rename()メソッドで部分的に変更
特定の列名だけを変更したい場合は、rename()メソッドが便利です。
# 特定の列名のみ変更
df_renamed = df.rename(columns={'col1': 'データ1', 'col2': 'データ2'})
print(df_renamed)
rename()メソッドの利点は、変更したい列だけを指定できることです。また、inplace=Trueパラメータを使用すると、元のDataFrameを直接変更できます。
# 元のDataFrameを直接変更
df.rename(columns={'col3': 'データ3'}, inplace=True)
辞書を使った列名の変更パターン
より複雑な列名変更パターンも、辞書を活用することで柔軟に対応できます。
# 複数の列名を同時に変更
column_mapping = {
'col1': '売上',
'col2': '利益',
'col3': '費用'
}
df = df.rename(columns=column_mapping)
print(df)
行名(インデックス)を変更する方法
indexプロパティで一括変更
列名と同様に、indexプロパティを使って行名を一括変更できます。
# 全ての行名を一括変更
df.index = ['2021年', '2022年', '2023年']
print(df)
rename()メソッドでインデックスを変更
rename()メソッドのindexパラメータを使用して、特定の行名だけを変更することも可能です。
# 特定の行名のみ変更
df = df.rename(index={'row1': '第1四半期', 'row2': '第2四半期'})
print(df)
高度な変更テクニック
関数を使った変更
rename()メソッドでは、辞書の代わりに関数を渡すこともできます。これにより、より動的な名前変更が可能になります。
# 列名を大文字に変換
df = df.rename(columns=str.upper)
print(df)
# 行名に接頭辞を追加
df = df.rename(index=lambda x: f'期間_{x}')
print(df)
条件に基づく変更
リスト内包表記や条件分岐を使用して、より複雑な変更ロジックも実装できます。
# 列名に番号を追加
new_columns = [f'{col}_データ' for col in df.columns]
df.columns = new_columns
print(df)
実践的な使用例
CSVファイルから読み込んだデータの列名変更
実際のデータ分析では、CSVファイルから読み込んだデータの列名を日本語に変更することがよくあります。
# CSVファイルの読み込み例(仮想)
# df = pd.read_csv('data.csv')
# 英語の列名を日本語に変更
column_translation = {
'name': '名前',
'age': '年齢',
'salary': '給与'
}
# df = df.rename(columns=column_translation)
重複する列名の処理
データの結合時に重複する列名が発生した場合の対処法:
# 重複列名のサンプル
df_dup = pd.DataFrame({
'data': [1, 2],
'data': [3, 4] # 重複列名
})
# 列名に連番を追加
df_dup.columns = [f'data_{i+1}' for i in range(len(df_dup.columns))]
print(df_dup)
エラーの回避とベストプラクティス
よくあるエラーとその対処法
列名・行名変更時によく遭遇するエラーとその回避方法を説明します。
# KeyErrorを回避する安全な変更方法
def safe_rename(df, columns_dict):
existing_columns = {k: v for k, v in columns_dict.items() if k in df.columns}
return df.rename(columns=existing_columns)
# 使用例
df = safe_rename(df, {'存在しない列': '新しい名前', 'col1': '存在する列'})
パフォーマンスの考慮事項
大きなDataFrameを扱う場合のパフォーマンス向上のコツ:
# inplace=Trueを使用してメモリ効率を向上
df.rename(columns={'old_name': 'new_name'}, inplace=True)
# 一括変更の方が個別変更より高速
df.columns = ['新列名1', '新列名2', '新列名3'] # 推奨
まとめ
Pandas DataFrameの行名・列名変更は、データ分析において基本的かつ重要な操作です。この記事で紹介した方法を使い分けることで、効率的にデータの可読性を向上させることができます。
主なポイント:
- 全体変更には
columns/indexプロパティが効率的 - 部分変更には
rename()メソッドが柔軟 - 関数や条件分岐を活用した動的な変更も可能
inplace=Trueでメモリ効率を向上
これらのテクニックを活用して、より読みやすく分析しやすいDataFrameを作成していきましょう。

