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,直接在原 DataFrame 上修改,不返回新对象;如果为 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)}")
运行结果 expected:
原始数据:
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': '第一列', 'col2': '第二列'}, axis='columns')
print("使用 axis='columns' 重命名列后:")
print(df_renamed_cols)
print("=" * 50)
# 使用 axis='index' 重命名行索引
df_renamed_idx = df.rename({'row1': '第一行', 'row2': '第二行', 'row3': '第三行'}, 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': '第一列', 'col2': '第二列'}, axis='columns')
print("使用 axis='columns' 重命名列后:")
print(df_renamed_cols)
print("=" * 50)
# 使用 axis='index' 重命名行索引
df_renamed_idx = df.rename({'row1': '第一行', 'row2': '第二行', 'row3': '第三行'}, 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 常用函数