サイトアイコン アマチュア無線局JS2IIU

【Pandas】行とカラムの名前を変更する方法

こんにちは、JS2IIUです。DataFrameを扱う際にカラム名を変更することがよくあります。いくつかやり方がありますので紹介していきます。よろしくお願いします。

急いでいる方向けに

カラム名変更(カラム全体を一度に変更する場合) df.columns = ["Column A", "Column B", "Column C"]
カラム名変更(カラムの一部を変更する場合)df.rename(columns={"colA": "Column A"})
行名変更(インデックス変更)df.index = ["Row 1", "Row 2", "Row 3"]

はじめに

Pandasはデータ処理や分析を効率的に行うための強力なライブラリです。その中でも、データフレームの行や列の名前を変更する操作は、データの可読性を向上させたり、分析に適した形に整形する際に欠かせません。本記事では、Pandasの.renameメソッドを使って行や列の名前を変更する方法について、基本から具体的な使い方までを詳しく解説します。

この記事を読むことで、以下の内容が理解できます:

データフレーム作成後にカラム名と行インデックスを変更する方法

データフレームを作成する際、カラム名を指定せずにデフォルトの名前を付けて作成する場合があります。その後でカラム名や行インデックスを設定する方法を以下に示します。

サンプルコード

import pandas as pd

# カラム名を指定せずにDataFrameを作成
data = [[10, 20, 30], [40, 50, 60], [70, 80, 90]]
df = pd.DataFrame(data)

print("変更前のDataFrame:")
print(df)

# カラム名を変更
df.columns = ["Column A", "Column B", "Column C"]

# 行インデックスを変更
df.index = ["Row 1", "Row 2", "Row 3"]

print("\n変更後のDataFrame:")
print(df)

出力

変更前のDataFrame:
    0   1   2
0  10  20  30
1  40  50  60
2  70  80  90

変更後のDataFrame:
        Column A  Column B  Column C
Row 1         10        20        30
Row 2         40        50        60
Row 3         70        80        90

解説

  1. pd.DataFrame(data)を用いて、カラム名を指定せずにデータフレームを作成すると、カラム名はデフォルトで整数(0, 1, 2)となります。
  2. df.columns属性を直接操作してカラム名を変更できます。
  3. 同様に、df.index属性を使用して行インデックス名を変更することも可能です。

この方法は、DataFrameの内容を直接書き換えます。データを後から加工する必要がある場面や、一旦デフォルトの設定でデータを確認したい場合に便利です。

行とカラムの名前を変更する方法

.renameメソッドを使った基本的な変更

Pandasの.renameメソッドは、行や列の名前を柔軟に変更できる便利なツールです。このメソッドでは、辞書型を指定して変更対象の名前と新しい名前をマッピングすることができます。下の例ではカラム全体を変更していますが、一部のカラム名を変更する場合にも.renameメソッドが使えます。

逆に、一部のカラム名を変更したい場合にdf.columns[0] = 'Person' とするとエラーになり変更することができません。

元のDataFrameを書き換える場合はdf = df.rename()のように代入する必要があります

サンプルコード

# サンプルデータフレーム
data = {
    "col1": [10, 20, 30],
    "col2": [40, 50, 60],
}
df = pd.DataFrame(data, index=["row1", "row2", "row3"])

print("変更前のデータフレーム:")
print(df)

# 列名を変更
renamed_df = df.rename(columns={"col1": "Column A", "col2": "Column B"})

# 行名を変更
renamed_df = renamed_df.rename(index={"row1": "Row One", "row2": "Row Two"})

print("\n変更後のデータフレーム:")
print(renamed_df)

出力

変更前のデータフレーム:
       col1  col2
row1     10    40
row2     20    50
row3     30    60

変更後のデータフレーム:
         Column A  Column B
Row One        10        40
Row Two        20        50
row3           30        60

直接リネームと置換を利用した方法の違い

  1. 直接リネーム
    .renameメソッドを使用して指定した名前を変更する方法は、目的の変更を簡潔に行える点が利点です。
  2. 置換を利用した方法
    .columns.index属性を文字列の置換メソッド(str.replace)と組み合わせることで、パターンに基づいて名前を変更することができます

サンプルコード

# サンプルデータフレーム
df.columns = df.columns.str.replace("col", "Column_")
df.index = df.index.str.replace("row", "Row_")

print("置換を利用して名前を変更:")
print(df)

出力

置換を利用して名前を変更:
         Column_1  Column_2
Row_1          10        40
Row_2          20        50
Row_3          30        60

inplace引数の使い方

.renameメソッドのinplace引数をTrueに設定すると、元のデータフレームを直接変更することができます。ただし、元のデータが失われるため注意が必要です。

サンプルコード
print("inplace=Trueを使用:")
df.rename(columns={"Column_1": "New Column 1"}, inplace=True)
df.rename(index={"Row_1": "New Row 1"}, inplace=True)

print(df)

出力

inplace=Trueを使用:
            New Column 1  Column_2
New Row 1             10        40
Row_2                 20        50
Row_3                 30        60

まとめ

Pandasの.renameメソッドは、データの整理やカスタマイズを柔軟に行える便利な方法です。また、.columns.index属性を直接操作して名前を設定することで、より簡潔な変更が可能です。それぞれの方法を適切に使い分けることで、データフレームの編集作業を効率化できます。

参考リンク

少しだけPRです。

Pandasについて詳しく知りたいかた、もっと使いこなしたい方におすすめの本です。数年前に購入しましたが、今も手元に置いて時々見返しています。「pandasクックブック Pythonによるデータ処理のレシピ」Theodore Petrou著、黒川利明訳。

最後まで読んでいただきありがとうございます。73

モバイルバージョンを終了