DataFrameのIndex名とカラム名の変更方法

pandas.DataFrameのIndex名(行名)とカラム名(列名)の変更方法をご紹介します。どちらとも関数rename()を使うだけです。

DataFrame.renameの仕様書はこちらです。
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rename.html

キーワード引数を使った変更方法

変更前のDataFrameのデータを用意します。Index名を”a, b, c”とし、カラム名を”A, B, C”としました。

df = pd.DataFrame(
    data=[[0, 1, 2], [3, 4 ,5], [6, 7, 8]],
    index=['a', 'b', 'c'],
    columns=['A', 'B', 'C'],
    )

print(df)
#    A  B  C
# a  0  1  2
# b  3  4  5
# c  6  7  8

関数rename()を使って変更します。Index名もカラム名もrename()を使い、キーワード引数でindexかcolumnsを指定し、変更内容を辞書型で渡します。

# Index名の変更
df = df.rename(index={'a': 'd', 'c': 'f'})

print(df)
#    A  B  C
# d  0  1  2
# b  3  4  5
# f  6  7  8


# カラム名の変更
df = df.rename(columns={'A': 'D', 'C': 'F'})

print(df)
#    D  B  F
# d  0  1  2
# b  3  4  5
# f  6  7  8

axis引数を使った変更方法

axis引数で”columns”を指定してカラム名を変更することもできます。カラム”B”の名前を”E”に変えてみます。

# DataFrameの作成
df = pd.DataFrame(
    data=[[0, 1, 2], [3, 4 ,5], [6, 7, 8]],
    index=['a', 'b', 'c'],
    columns=['A', 'B', 'C'],
    )

print(df)
#    A  B  C
# a  0  1  2
# b  3  4  5
# c  6  7  8

# カラム名の変更
df = df.rename({'B': 'E'}, axis='columns')

print(df)
#    A  E  C
# a  0  1  2
# b  3  4  5
# c  6  7  8

次は、axis引数でIndex名を変えてみましょう。

ここで、ミスの例をお見せします。Index名は”a, b, c”となってます。Index名に存在しない”A”の名前を”D”に変更するコードを書いてみます。下が実行結果になりますが、Index名はそのままでDataFrameの中身自体も何も変わっていません。エラーになるわけでもありません。こういうエラーを防ぐ引数がerrorsです。

df = pd.DataFrame(
    data=[[0, 1, 2], [3, 4 ,5], [6, 7, 8]],
    index=['a', 'b', 'c'],
    columns=['A', 'B', 'C'],
    )

print(df)
#    A  B  C
# a  0  1  2
# b  3  4  5
# c  6  7  8


df = df.rename({'A': 'D'}, axis='index')

print(df)
#    A  B  C
# a  0  1  2
# b  3  4  5
# c  6  7  8

errors引数を使ってみます。エラーが発生したら、プログラムの実行が止まります。errorsのデフォルトは”ignore”なので”raise”指定しないとエラーに気づくことはできません。

df = df.rename({'A': 'D'}, axis='index', errors='raise')

上のコードのように、errors=’raise’指定をして存在しないIndex名やカラム名を変更使用とすると以下のエラーになります。

KeyError: "['A'] not found in axis"

Index名”a”を”d”に変更する正しいコードは以下となります。

df = df.rename({'a': 'd'}, axis='index', errors='raise')

print(df)
#    A  B  C
# d  0  1  2
# b  3  4  5
# c  6  7  8