杰瑞科技汇

Python DataFrame如何修改列名?

在 Python 中,处理 Pandas DataFrame 的列名是一项非常基础且重要的操作,下面我将为你详细介绍如何获取、修改、重命名和选择 DataFrame 的列名,并提供丰富的示例。

Python DataFrame如何修改列名?-图1
(图片来源网络,侵删)

获取列名

要获取 DataFrame 的所有列名,最简单的方法是使用 DataFrame.columns 属性,它返回一个 Index 对象,你可以像操作列表一样操作它。

import pandas as pd
import numpy as np
# 创建一个示例 DataFrame
data = {
    '姓名': ['张三', '李四', '王五', '赵六'],
    '年龄': [25, 30, 28, 35],
    '城市': ['北京', '上海', '广州', '深圳'],
    '薪资': [12000, 15000, 13500, 18000]
}
df = pd.DataFrame(data)
# 获取列名
column_names = df.columns
print("列名对象类型:", type(column_names))
print("列名:", column_names)

输出:

列名对象类型: <class 'pandas.core.indexes.base.Index'>
列名: Index(['姓名', '年龄', '城市', '薪资'], dtype='object')

转换为列表: 如果你需要一个标准的 Python 列表,可以使用 .tolist() 方法。

column_list = df.columns.tolist()
print("列名列表:", column_list)
# 输出: 列名列表: ['姓名', '年龄', '城市', '薪资']

修改列名

有几种方法可以修改列名,适用于不同的场景。

Python DataFrame如何修改列名?-图2
(图片来源网络,侵删)

直接赋值给 df.columns

这是最直接的方法,但会一次性修改所有列名,你需要提供一个包含新列名的列表,且列表长度必须与列数相同。

# 创建一个新的列名列表
new_columns = ['full_name', 'age', 'location', 'salary']
# 直接赋值
df.columns = new_columns
print(df)

输出:

  full_name  age location  salary
0       张三   25      北京   12000
1       李四   30      上海   15000
2       王五   28      广州   13500
3       赵六   35      深圳   18000

使用 rename() 方法 (推荐)

rename() 方法非常灵活,可以只修改你指定的列,而保持其他列不变,它返回一个新的 DataFrame,除非你设置 inplace=True

使用字典映射 (最常用): 你可以提供一个字典,键是旧列名,值是新列名。

Python DataFrame如何修改列名?-图3
(图片来源网络,侵删)
# 恢复原始列名
df.columns = ['姓名', '年龄', '城市', '薪资']
# 只修改 '姓名' 和 '薪资' 两列
df_renamed = df.rename(columns={'姓名': '员工姓名', '薪资': '月薪'})
print("修改后的 DataFrame:")
print(df_renamed)
print("\n原始 DataFrame 未改变:")
print(df)

输出:

修改后的 DataFrame:
  员工姓名  年龄  城市   月薪
0   张三  25  北京  12000
1   李四  30  上海  15000
2   王五  28  广州  13500
3   赵六  35  深圳  18000
原始 DataFrame 未改变:
  姓名  年龄  城市    薪资
0  张三  25  北京  12000
1  李四  30  上海  15000
2  王五  28  广州  13500
3  赵六  35  深圳  18000

使用 inplace=True (原地修改): 如果你想在原 DataFrame 上直接修改,而不是创建一个新的,可以设置 inplace=True

df.rename(columns={'城市': '工作地点'}, inplace=True)
print(df)

输出:

  姓名  年龄 工作地点    薪资
0  张三  25    北京  12000
1  李四  30    上海  15000
2  王五  28    广州  13500
3  赵六  35    深圳  18000

使用 set_axis() 方法

set_axis() 方法也可以用来设置列名(或行名),与 rename 不同,它通常用于一次性替换所有轴(列或行)的标签。

# 恢复原始列名
df.columns = ['姓名', '年龄', '城市', '薪资']
# 使用 set_axis 修改所有列名
df_new_axis = df.set_axis(['user_name', 'user_age', 'city', 'income'], axis='columns')
print(df_new_axis)

输出:

  user_name  user_age city  income
0       张三        25  北京   12000
1       李四        30  上海   15000
2       王五        28  广州   13500
3       赵六        35  深圳   18000

注意: set_axis 默认返回一个新对象,要原地修改,需要设置 inplace=True


重命名列名(小写、下划线等)

在实际项目中,我们经常需要将列名统一成某种格式,例如全部小写、用下划线连接(snake_case)等,这通常结合了字符串操作。

# 假设列名是大小写混合且有空格
df.columns = ['First Name', 'Last Name', 'Age In Years', 'City Name']
# 使用列表推导式进行重命名
df.columns = [col.lower().replace(' ', '_') for col in df.columns]
print(df)

输出:

  first_name  last_name  age_in_years  city_name
0       张三        李三            25        北京
1       张四        李四            30        上海
2       张五        李五            28        广州
3       张六        李六            35        深圳

选择列

获取列名后,最常用的操作就是选择列来进行分析。

选择单列

使用方括号 [],结果是一个 Pandas Series。

name_series = df['姓名']
print("选择 '姓名' 列:")
print(name_series)
print("类型:", type(name_series))

输出:

选择 '姓名' 列:
0    张三
1    李四
2    王五
3    赵六
Name: 姓名, dtype: object
类型: <class 'pandas.core.series.Series'>

选择多列

使用一个包含列名的列表,结果是一个 DataFrame。

subset_df = df[['姓名', '薪资']]
print("选择 '姓名' 和 '薪资' 列:")
print(subset_df)
print("类型:", type(subset_df))

输出:

选择 '姓名' 和 '薪资' 列:
  姓名    薪资
0  张三  12000
1  李四  15000
2  王五  13500
3  赵六  18000
类型: <class 'pandas.core.frame.DataFrame'>

添加新列

向 DataFrame 添加新列非常简单,可以直接通过赋值实现。

# 添加一个新列 '部门'
df['部门'] = ['技术部', '市场部', '技术部', '财务部']
print(df)

输出:

  姓名  年龄  城市    薪资     部门
0  张三  25  北京  12000   技术部
1  李四  30  上海  15000   市场部
2  王五  28  广州  13500   技术部
3  赵六  35  深圳  18000   财务部

操作 方法 描述
获取列名 df.columns 返回一个包含所有列名的 Index 对象。
df.columns.tolist() 将列名转换为 Python 列表。
修改所有列名 df.columns = [...] 直接赋值一个新列表,会替换所有列名。
修改部分列名 df.rename(columns={...}) 使用字典映射,推荐使用,安全且灵活。
inplace=True renameset_axis 一起使用,可在原 DataFrame 上修改。
批量重命名 df.columns = [...] 结合列表推导式和字符串方法。
选择列 df['列名'] 选择单列,返回 Series
df[['列名1', '列名2']] 选择多列,返回 DataFrame
添加列 df['新列名'] = [...] 通过赋值直接添加新列。

掌握这些操作是使用 Pandas 进行数据清洗、转换和分析的基础。rename() 方法因其灵活性和安全性,通常是修改列名的首选。

分享:
扫描分享到社交APP
上一篇
下一篇