Pandas df.rename() 関数

Pandas でよく使う関数


df.rename()Pandas で DataFrame の列名またはインデックスをリネームするための関数です。

データ分析では、明確な列名とインデックスはコードの可読性と保守性にとって非常に重要です。rename()列名とインデックス名を柔軟に変更でき、データをより整然として理解しやすくします。これはデータのインポート、クリーニング、レポート生成時に特に役立ちます。


基本構文とパラメータ

rename()DataFrame のメンバー関数であり、ドット演算子.によって呼び出されます。

構文形式

DataFrame.rename(mapper=None, index=None, columns=None, axis=None, inplace=False, errors='ignore')

パラメータの説明

パラメータ 型 必須かどうか 説明 デフォルト値
mapper dict または function オプション 軸(行インデックスまたは列名)をリネームするためのマッピングルールです。辞書または関数を指定できます。axisパラメータと組み合わせて使用します。 None
index dict または function オプション 行インデックスのリネームルールを直接指定します。優先されます。mapperとaxis。 None
columns dict または function オプション 列名のリネームルールを直接指定します。優先されます。mapperとaxis。 None
axis int または str オプション リネームする軸を指定します。0 或 'index'行インデックスを表し、1 或 'columns'列名を表します。 None
inplace bool オプション True の場合、True元の DataFrame 上で直接変更し、新しいオブジェクトを返しません。False の場合、False新しい DataFrame を返し、元のデータは変更されません。 False
errors str オプション エラー処理を制御します。'raise'対応するキーが見つからない場合に例外をスローすることを示します。'ignore'存在しないキーを無視することを示します。 'ignore'

戻り値の説明

  • 新しい DataFrame を返します(inplace=False)、またはNone(inplace=True)。
  • 返された DataFrame では、列名またはインデックスがリネームされています。

例

一連の例を通じて、徹底的にマスターしましょう。rename()の使い方を。

例1:列名をリネームする

使用columnsパラメータを使うと、列名を簡単にリネームできます。

例

import pandas as pd

# DataFrame を作成する
data = {
    'name': ['张三', '李四', '王五'],
    'age': [25, 30, 35],
    'salary': [5000, 6000, 7000]
}
df = pd.DataFrame(data)

print("原始数据:")
print(df)
print("=" * 50)

# 辞書を使用して列名をリネームする
df_renamed = df.rename(columns={
    'name': '姓名',
    'age': '年龄',
    'salary': '薪资'
})

print(列名を変更した後のデータ:)
print(df_renamed)

実行結果の予想:

原始数据:
   name  age  salary
0  张三   25   5000
1  李四   30   6000
2  王五   35   7000
==================================================
重命名列名后的数据:
    姓名  年龄   薪资
0  张三   25  5000
1  李四   30  6000
2  王五   35  7000

コードの解説:

  1. 元のデータの列名は英語なので、辞書を使用して中国語にリネームします。
  2. 使用columnsパラメータは列名にのみ影響し、行インデックスには影響しません。
  3. これは一般的なデータ正規化操作です。

例2:行インデックスをリネームする

使用indexパラメータを使用して行インデックスをリネームできます。

例

import pandas as pd

# デフォルトのインデックスを使用して DataFrame を作成する
data = {
    '水果': ['苹果', '香蕉', '橙子'],
    '数量': [10, 20, 15]
}
df = pd.DataFrame(data)

print("原始数据(默认索引):")
print(df)
print("=" * 50)

# 辞書を使用して行インデックスをリネームする
df_renamed = df.rename(index={
    0: '第一行',
    1: '第二行',
    2: '第三行'
})

print("行インデックスをリネームした後のデータ:")
print(df_renamed)

実行結果の予想:

原始数据(默认索引):
   水果  数量
0  苹果  10
1  香蕉  20
2  橙子  15
==================================================
重命名行索引后的数据:
     水果  数量
第一行   苹果  10
第二行   香蕉  20
第三行   橙子  15

コードの解説:

  • 元のデータの行インデックスは 0、1、2 のような数字です。
  • 使用indexパラメータを使用すると、これらをより意味のある名前にリネームできます。
  • これはレポートを生成するときに特に役立ちます。
  • 例3:列名と行インデックスを同時にリネームする

    列名と行インデックスを一度にリネームできます。

    例

    import pandas as pd

    # DataFrame を作成する
    data = {
        'A': [1, 2, 3],
        'B': [4, 5, 6]
    }
    df = pd.DataFrame(data, index=['x', 'y', 'z'])

    print("原始数据:")
    print(df)
    print("=" * 50)

    # 列名と行インデックスを同時にリネームする
    df_renamed = df.rename(columns={'A': '列A', 'B': '列B'}, index={'x': '行X', 'y': '行Y', 'z': '行Z'})

    print("リネーム後のデータ:")
    print(df_renamed)

    実行結果の予想:

    原始数据:
       A  B
    x  1  4
    y  2  5
    z  3  6
    ==================================================
    重命名后的数据:
        列A  列B
    行X   1   4
    行Y   2   5
    行Z   3   6
    

    コードの解説:

    • 同時に使用できます。columnsとindexパラメータ。
    • これはデータのインポートと標準化のときに非常に便利です。
    • 例4:関数を使用してリネームする

      rename()関数をパラメータとして受け取り、列名やインデックスを一括変換できます。

      例

      import pandas as pd

      # 列名が複雑な DataFrame を作成する
      data = {
          'USER_NAME': ['张三', '李四'],
          'USER_AGE': [25, 30],
          'USER_SALARY': [5000, 6000]
      }
      df = pd.DataFrame(data)

      print("原始数据:")
      print(df)
      print("=" * 50)

      # 関数を使用して列名を小文字に変換する
      df_lower = df.rename(columns=str.lower)

      print("列名转小写后:")
      print(df_lower)
      print("=" * 50)

      # 関数を使用してプレフィックスを削除する(例:USER_)
      df_clean = df.rename(columns=lambda x: x.replace('USER_', ''))

      print("去除前缀后:")
      print(df_clean)
      print("=" * 50)

      # 関数を使用してプレフィックスを追加する
      df_prefix = df.rename(columns=lambda x: 'col_' + x)

      print("添加前缀后:")
      print(df_prefix)

      実行結果の予想:

      原始数据:
        USER_NAME  USER_AGE  USER_SALARY
      0       张三       25       5000
      1       李四       30       6000
      列名转小写后:
        user_name  user_age  user_salary
      0       张三       25       数据清洗
      1       李四       30       6000
      ==================================================
      去除前缀后:
        NAME  AGE  SALARY
      0  张三   25  5000
      1  李四   30  6000
      

      コードの解説:

      • str.lowerこれは文字列を小文字に変換するメソッドです。
      • 使用lambda関数を使用すると、複雑な命名規則を柔軟に処理できます。
      • この方法は、多数の列名を一括処理するのに適しています。
      • 例5:inplace パラメータを使用して元の場所で変更する

        使用inplace=True元の DataFrame 上で直接変更でき、新しいオブジェクトを返しません。

        例

        import pandas as pd

        # DataFrame を作成する
        data = {
            'name': ['张三', '李四'],
            'age': [25, 30]
        }
        df = pd.DataFrame(data)

        print("原始数据:")
        print(df)
        print(f"原始数据 id: {id(df)}")
        print("=" * 50)

        # inplace=True を使用して元の場所で変更する
        df.rename(columns={'name': '姓名', 'age': '年龄'}, inplace=True)

        print("inplace=True を使用して変更したデータ:")
        print(df)
        print(f"修改后数据 id: {id(df)}")

        実行結果 期待値:

        原始数据:
           name  age
        0  张三   25
        1  李四   30
        原始数据 id: 140234567890
        ==================================================
        使用 inplace=True 修改后的数据:
            姓名  年龄
        0  张三   25
        1  李四   30
        修改后数据 id: 140234567890  # 同一个对象
        

        コードの解説:

        • 使用inplace=True後、DataFrame のメモリアドレス(id)が変わらないため、元の場所で変更されたことがわかります。
        • この方法はメモリを節約でき、特に大規模なデータセットを処理するときに役立ちます。
        • 例6:存在しない列名の処理

          使用errorsパラメータは、列名が存在しない場合の動作を制御できます。

          例

          import pandas as pd

          # DataFrame を作成する
          data = {
              'A': [1, 2, 3],
              'B': [4, 5, 6]
          }
          df = pd.DataFrame(data)

          print("原始数据:")
          print(df)
          print("=" * 50)

          # 存在しない列のリネームを試みる(errors='ignore'(デフォルト)を使用)
          df_renamed = df.rename(columns={'C': 'C_new'})  # C 列は存在しない

          print("存在しない列(C)の名前を変更し、デフォルトの動作を使用:")
          print(df_renamed)  # 何も変更されない
          print("=" * 50)

          # 存在しない列のリネームを試みる(errors='raise' を使用)
          try:
              df_renamed2 = df.rename(columns={'C': 'C_new'}, errors='raise')
          except KeyError as e:
              print(f"抛出异常: {e}")

          実行結果の予想:

          原始数据:
             A  B
          0  1  4
          1  2  5
          2  3  6
          ==================================================
          重命名不存在的列(C),使用默认行为:
             A  B
          0  1  4
          1  2  5
          2  3  6  # 无变化
          ==================================================errors
          ==================================================
          抛出异常: 'C'
          

          コードの解説:

          • デフォルトでは(errors='ignore')、列が存在しない場合、何も変更されず、エラーも発生しません。
          • 設定するとerrors='raise'、スローされますKeyError例外が。
          • 例7:axis パラメータを使用する

            使用法axisパラメータを使用すると、名前を変更する軸をより柔軟に指定できます。

            例

            import pandas as pd

            # DataFrameを作成する
            data = {
                'col1': [1, 2, 3],
                'col2': [4, 5, 6]
            }
            df = pd.DataFrame(data, index=['row1', 'row2', 'row3'])

            print("元のデータ:")
            print(df)
            print("=" * 50)

            # axis='columns'を使用して列名を変更する
            df_renamed_cols = df.rename({'col1': '第1列', 'col2': '第2列'}, axis='columns')

            print("axis='columns'で列名を変更した後:")
            print(df_renamed_cols)
            print("=" * 50)

            # axis='index'を使用して行インデックスの名前を変更する
            df_renamed_idx = df.rename({'row1': '第1行', 'row2': '第2行', 'row3': '第3行'}, axis='index')

            print("axis='index'で行名を変更した後:")
            print(df_renamed_idx)

            実行結果の想定:

            原始数据:
                  col1  col2
            row1     1     4
            row2     2     5
            row3     3     6
            ==================================================
            使用 axis='columns' 重命名列后:
                  第一列  第二列
            row1     1     4
            row2     2     5
            row3     3     6
            

            コード解説:

            • axis='columns' 或 axis=1列の操作を表します。
            • axis='index' 或 axis=0行インデックスの操作を表します。
            • この構文はNumPyのスタイルと一致しています。

            • 注意事項

              • rename()デフォルトでは元のDataFrameは変更されません。その場で変更したい場合は、inplace=Trueパラメータを使用します。
              • 優先して使用するcolumnsとindexパラメータではなくmapperとaxis、前者の方が明確で分かりやすいからです。
              • 関数を使用して名前を変更する場合は、関数が文字列型を返すことを確認してください。そうしないとエラーが発生する可能性があります。
              • 大規模なデータセットを処理する場合は、inplace=True使用するとメモリを節約できます。
              • 名前を変更する前に、現在の列名を確認することをお勧めします。次を使用してdf.columns確認できます。

              Pandas よく使う関数

              その他の拡張