Python
轻松重命名 Python 中的列: 初学者指南

轻松重命名 Python 中的列: 初学者指南

MoeNagy Dev

在 Pandas 数据框中重命名列

了解 Pandas 数据框

Pandas 数据框是 Pandas 库中的基本数据结构,Pandas 是一个强大的开源数据分析和操作工具。数据框是一种二维标记数据结构,类似于电子表格或 SQL 表,具有行和列。数据框中的每一列可以有不同的数据类型,这使其成为一种灵活且多功能的数据结构,适用于各种数据处理任务。

访问和修改列名

在 Pandas 中,您可以使用各种方法访问和修改数据框的列名。列名存储在数据框的 columns 属性中,它是一个 Index 对象。您可以通过简单地打印 columns 属性来查看当前的列名:

import pandas as pd
 
# 创建一个示例数据框
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
print(df.columns)
# 输出: Index(['A', 'B', 'C'], dtype='object')

使用 rename() 方法重命名列

在 Pandas 数据框中重命名列的主要方法是使用 rename() 方法。此方法允许您一次重命名一个或多个列,并可以以不同的方式使用。

重命名单个列

要重命名单个列,可以将一个字典传递给 rename() 方法,其中键是旧列名,值是新列名:

# 重命名单个列
df = df.rename(columns={'A': 'new_column_name'})
print(df.columns)
# 输出: Index(['new_column_name', 'B', 'C'], dtype='object')

重命名多个列您也可以通过传递一个包含多个键值对的字典来同时重命名多个列:

# 重命名多个列
df = df.rename(columns={'B': 'column_b', 'C': 'column_c'})
print(df.columns)
# 输出: Index(['new_column_name', 'column_b', 'column_c'], dtype='object')

使用字典重命名列

除了直接传递列名,您也可以使用字典将旧列名映射到新列名:

# 使用字典重命名列
rename_dict = {'new_column_name': 'column_a', 'column_b': 'column_b_new', 'column_c': 'column_c_new'}
df = df.rename(columns=rename_dict)
print(df.columns)
# 输出: Index(['column_a', 'column_b_new', 'column_c_new'], dtype='object')

使用函数重命名列

您也可以使用函数来重命名列。该函数应该以当前列名作为输入,并返回新的列名:

# 使用函数重命名列
def rename_func(col_name):
    if col_name == 'column_a':
        return 'column_a_new'
    elif col_name == 'column_b_new':
        return 'column_b_renamed'
    else:
        return col_name
 
df = df.rename(columns=rename_func)
print(df.columns)
# 输出: Index(['column_a_new', 'column_b_renamed', 'column_c_new'], dtype='object')

就地重命名列与创建新的数据框

rename() 方法可用于直接修改原始数据框,也可用于创建一个新的数据框并重命名列。默认情况下, rename() 会返回一个新的数据框,但您可以使用 inplace=True 参数直接修改原始数据框:

# 就地重命名列
df.rename(columns={'column_a_new': 'column_a_renamed'}, inplace=True)
print(df.columns)
# 输出: Index(['column_a_renamed', 'column_b_renamed', 'column_c_new'], dtype='object')
 
# 创建一个新的数据框并重命名列
new_df = df.rename(columns={'column_b_renamed': 'column_b_new'})
print(new_df.columns)
# 输出.

t: Index(['column_a_renamed', 'column_b_new', 'column_c_new'], dtype='object')

处理重复的列名

如果您尝试将列重命名为数据框中已经存在的名称,Pandas 将引发 ValueError 异常。为了处理这种情况,您可以在 rename() 方法中使用 prefixsuffix 参数:

# 处理重复的列名
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'A': [7, 8, 9]})
print(df.columns)
# 输出: Index(['A', 'B', 'A'], dtype='object')
 
# 使用前缀重命名列
df = df.rename(columns={'A': 'A_new', 'B': 'B_new'})
print(df.columns)
# 输出: Index(['A_new', 'B_new', 'A'], dtype='object')
 
# 使用后缀重命名列
df = df.rename(columns={'A': 'A_suffix', 'B': 'B_suffix'})
print(df.columns)
# 输出: Index(['A_suffix', 'B_suffix', 'A'], dtype='object')

在分组数据框中重命名列

在处理分组数据框时,您也可以重命名列。当您对数据框进行多个聚合或转换操作时,这可能很有用,因为您可以为结果列提供更具描述性的名称:

# 在分组数据框中重命名列
df = pd.DataFrame({'A': [1, 2, 3, 1, 2, 3], 'B': [4, 5, 6, 7, 8, 9]})
grouped_df = df.groupby('A').agg({'B': ['min', 'max']})
print(grouped_df.columns)
# 输出: MultiIndex([('B', 'min'), ('B', 'max')], )
 
# 重命名分组数据框中的列
grouped_df = grouped_df.rename(columns={'B': {'min': 'B_min', 'max': 'B_max'}})
print(grouped_df.columns)
# 输出: MultiIndex([('B_min',), ('B_max',)], )

在其他数据结构中重命名列

在 Numpy 数组中重命名列

虽然 Pandas 数据框是在 Python 中处理表格数据的最常见方式,但您可能偶尔需要在 Numpy 数组中重命名列。由于 Numpy 数组没有像数据框那样的命名列,您可以使用 zip() 函数和列表推导式来重命名列:

import numpy as np
 
#.
```创建一个Numpy数组
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
column_names = ['A', 'B', 'C']
 
# 重命名Numpy数组中的列
renamed_arr = np.column_stack([arr[:, i].tolist() for i, name in enumerate(column_names)])
renamed_arr = np.column_stack([renamed_arr, column_names])
print(renamed_arr)
# 输出:
# [['1' 'A']
#  ['2' 'B']
#  ['3' 'C']
#  ['4' 'A']
#  ['5' 'B']
#  ['6' 'C']
#  ['7' 'A']
#  ['8' 'B']
#  ['9' 'C']]
 
### 重命名CSV文件中的列
 
如果需要重命名CSV文件中的列,可以将文件加载到Pandas数据框中,重命名列,然后将数据框写回到新的CSV文件:
 
```python
# 重命名CSV文件中的列
df = pd.read_csv('input.csv')
df = df.rename(columns={'old_column_name': 'new_column_name'})
df.to_csv('output.csv', index=False)

重命名SQL表中的列

在使用SQL数据库时,可以使用SQL命令来重命名列。语法可能会根据所使用的数据库管理系统(DBMS)而略有不同,但基本方法是相同的:

-- 重命名SQL表中的列
ALTER TABLE table_name
RENAME COLUMN old_column_name TO new_column_name;

另外,您也可以使用SQL客户端或Python中的ORM(对象关系映射)库,如SQLAlchemy,以编程方式与数据库交互并重命名列。

重命名列的高级技术

使用正则表达式批量重命名列

对于更复杂的列重命名场景,您可以使用正则表达式来执行批量重命名操作。当需要应用一致的命名约定或对多个列名进行多次更改时,这可能会很有用:

# 使用正则表达式批量重命名列
import re
 
df = pd.DataFrame({'feature_1': [1, 2, 3], 'feature_2': [4, 5, 6], 'target_variable': [7, 8, 9]})
 
# 使用正则表达式重命名列
df = df.rename(columns=lambda x: re.sub(r'feature_(\d+)', r'feature\1', x))

print(df.columns)

输出: Index(['feature1', 'feature2', 'target_variable'], dtype='object')

根据列索引重命名列

在某些情况下,您可能希望根据列的索引位置而不是列名来重命名列。您可以通过将列表或字典传递给 rename() 方法来实现这一点,其中键是列索引,值是新的列名:

# 根据列索引重命名列
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
 
# 使用列表重命名列
df = df.rename(columns={0: 'new_column_a', 1: 'new_column_b', 2: 'new_column_c'})
print(df.columns)
# 输出: Index(['new_column_a', 'new_column_b', 'new_column_c'], dtype='object')
 
# 使用字典重命名列
df = df.rename(columns={0: 'col_a', 1: 'col_b', 2: 'col_c'})
print(df.columns)
# 输出: Index(['col_a', 'col_b', 'col_c'], dtype='object')

重命名多级索引数据框的列

在使用多级索引数据框时,您可以同时重命名外层和内层索引的列。这在处理分层或嵌套数据结构时非常有用:

# 重命名多级索引数据框的列
df = pd.DataFrame({('group1', 'A'): [1, 2, 3], ('group1', 'B'): [4, 5, 6], ('group2', 'C'): [7, 8, 9]})
 
# 重命名外层索引的列
df = df.rename(columns={('group1', 'A'): ('group1', 'new_A'), ('group1', 'B'): ('group1', 'new_B')})
print(df.columns)
# 输出: MultiIndex([('group1', 'new_A'), ('group1', 'new_B'), ('group2', 'C')], )
 
# 重命名内层索引的列
df = df.rename(columns={('group1', 'new_A'): ('group1', 'column_a'), ('group1', 'new_B'): ('group1', 'column_b')})

循环和迭代

循环和迭代是 Python 中的基本概念,允许您重复执行一个代码块。Python 提供了几种循环结构,包括 for 循环和 while 循环。

for 循环

Python 中的 for 循环用于遍历. 遍历一个序列,如列表、元组或字符串。for 循环的一般语法如下:

for item in sequence:
    # 对 item 执行某些操作

下面是一个使用 for 循环遍历列表并打印每个元素的示例:

fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
    print(fruit)

输出:

apple
banana
cherry

你也可以使用 range() 函数创建一个数字序列来遍历:

for i in range(5):
    print(i)

输出:

0
1
2
3
4

while 循环

Python 中的 while 循环会重复执行一个代码块,只要给定的条件为 Truewhile 循环的一般语法如下:

while condition:
    # 执行某些操作

下面是一个使用 while 循环从 5 倒数到 1 的示例:

count = 5
while count > 0:
    print(count)
    count -= 1
print("Blast off!")

输出:

5
4
3
2
1
Blast off!

嵌套循环

你也可以在一个循环中嵌套另一个循环。当需要对两个或更多序列的元素组合执行任务时,这很有用。

for i in range(3):
    for j in range(3):
        print(f"i = {i}, j = {j}")

输出:

i = 0, j = 0
i = 0, j = 1
i = 0, j = 2
i = 1, j = 0
i = 1, j = 1
i = 1, j = 2
i = 2, j = 0
i = 2, j = 1
i = 2, j = 2

breakcontinue 语句

break 语句用于提前退出循环,而 continue 语句用于跳过当前迭代并进入下一次迭代。

下面是一个使用 break 在满足某个条件时退出循环的示例:

for i in range(10):
    if i == 5:
        break
    print(i)

输出:

0
1
2
3
4

下面是一个使用 continue 跳过当前迭代的示例:

for i in range(10):
    if i % 2 == 0:
        continue
    print(i)

输出:

1
3
5
7
9

函数

Python 中的函数是可重用的代码块,用于执行特定的任务。

定义函数

在 Python 中定义函数的一般语法如下:

def 函数名(参数):
    # 函数主体
    return 返回值

下面是一个简单的函数示例,它用于计算两个数字的和:

def 添加数字(a, b):
    return a + b
 
结果 = 添加数字(3, 4)
print(结果)  # 输出: 7

函数参数

函数可以接受不同类型的参数,包括位置参数、关键字参数和默认参数。

位置参数按照定义的顺序传递:

def 问候(名字, 消息):
    print(f"{名字}, {消息}!")
 
问候("Alice", "早上好")  # 输出: Alice, 早上好!

关键字参数允许你通过参数名指定参数:

def 问候(名字, 消息):
    print(f"{名字}, {消息}!")
 
问候(消息="祝你今天愉快", 名字="Bob")  # 输出: Bob, 祝你今天愉快!

默认参数在未提供参数时使用默认值:

def 问候(名字, 消息="你好"):
    print(f"{名字}, {消息}!")
 
问候("Charlie")  # 输出: Charlie, 你好!
问候("Charlie", "再见")  # 输出: Charlie, 再见!

返回值

函数可以使用 return 语句返回值。你可以返回单个值、多个值,或者复杂的数据结构,如列表或字典。

def 计算面积(宽度, 高度):
    面积 = 宽度 * 高度
    return 面积
 
结果 = 计算面积(5, 10)
print(结果)  # 输出: 50

你也可以返回多个值,用逗号分隔:

def 获取姓名和年龄():
    名字 = "Alice"
    年龄 = 30
    return 名字, 年龄
 
名字, 年龄 = 获取姓名和年龄()
print(f"名字: {名字}, 年龄: {年龄}")  # 输出: 名字: Alice, 年龄: 30

作用域和变量可见性

在 Python 中,变量有一个定义的作用域,它决定了变量在哪里可以被访问和修改。 可以访问和修改。有两个主要的作用域:全局和局部。

全局变量可以在整个程序中访问,而局部变量只能在定义它们的函数或块中访问。

global_variable = 10
 
def my_function():
    # 局部变量
    local_variable = 20
    print(f"局部变量: {local_variable}")
    print(f"全局变量: {global_variable}")
 
my_function()  # 输出: 局部变量: 20, 全局变量: 10
 
print(local_variable)  # 错误: local_variable 未定义

模块和包

Python 的模块化设计允许您将代码组织成可重用和可维护的组件,称为模块和包。

模块

模块是包含 Python 定义和语句的文件。您可以将模块导入到代码中,以使用它们定义的函数、类和变量。

# math_utils.py
def add(a, b):
    # 添加两个数字
    return a + b
 
def subtract(a, b):
    # 减去两个数字
    return a - b
# main.py
import math_utils
 
result = math_utils.add(5, 3)
print(result)  # 输出: 8

您也可以从模块中导入特定的函数或变量:

# main.py
from math_utils import add, subtract
 
result = add(5, 3)
print(result)  # 输出: 8

包是相关模块的集合,可以组织成层次结构。这允许您更有效地组织和管理代码。

my_package/
    __init__.py
    math_utils/
        __init__.py
        basic.py
        advanced.py
# main.py
from my_package.math_utils.basic import add
from my_package.math_utils.advanced import calculate_area
 
result = add(5, 3)
area = calculate_area(4, 5)
print(result)  # 输出: 8
print(area)    # 输出: 20

标准库和第三方包

Python 附带了一个庞大的标准库,提供了各种内置模块来执行各种任务。此外,Python 社区还开发了许多第三方包,可以访问和修改。这个 Python 库可以使用 pip 等包管理器安装。

import os  # 导入操作系统相关的功能
import math  # 导入数学相关的功能
import datetime  # 导入日期和时间相关的功能
import requests  # 导入网络请求相关的功能

结论

在这个教程中,你已经学习了 Python 的基础概念,包括数据类型、控制结构、函数和模块。你已经看到如何编写和执行 Python 代码,以及如何使用模块和包组织代码。

Python 是一种多功能且强大的语言,拥有广泛的库和工具生态系统。通过掌握这些核心概念,你将成为一名熟练的 Python 开发者,能够处理各种编程任务和项目。

记住,提高 Python 技能的最佳方式是实践、实验和持续学习。探索标准库,尝试不同的第三方包,并构建自己的项目,以巩固你的理解并获得实践经验。

祝你编码愉快!

MoeNagy Dev.