Pandas df.rename() 関数
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)
# 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
コードの解説:
- 元のデータの列名は英語なので、辞書を使用して中国語にリネームします。
- 使用
columnsパラメータは列名にのみ影響し、行インデックスには影響しません。 - これは一般的なデータ正規化操作です。
例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)
# デフォルトのインデックスを使用して 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)
# 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)
# 列名が複雑な 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)}")
# 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}")
# 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)
# 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確認できます。
注意事項
その他の拡張