Python
轻松更改 Pandas 中的列名:初学者指南

轻松更改 Pandas 中的列名:初学者指南

MoeNagy Dev

在 Pandas 中更改列名

Pandas DataFrame 概述

Pandas DataFrame 是一个二维的表格数据结构,包含行和列。DataFrame 中的每一列可以有不同的数据类型,并且可以单独访问和操作这些列。

了解 Pandas DataFrame 的结构

import pandas as pd
 
# 创建一个示例 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35],
        'City': ['New York', 'London', 'Paris']}
 
df = pd.DataFrame(data)
print(df)

输出:

       Name  Age       City
0    Alice   25  New York
1      Bob   30    London
2  Charlie   35     Paris

访问和操作列数据

您可以使用列名作为属性或方括号中的键来访问 DataFrame 的单个列:

print(df['Name'])
print(df.Age)

输出:

0    Alice
1      Bob
2  Charlie
Name: Name, dtype: object
0    25
1    30
2    35
Name: Age, dtype: int64

您还可以为列赋值新的值:

df['Country'] = ['USA', 'UK', 'France']
print(df)

输出:

       Name  Age       City Country
0    Alice   25  New York     USA
1      Bob   30    London      UK
2  Charlie   35     Paris   France

重命名列

在使用 Pandas DataFrame 时,重命名列是一个常见的任务。有几种方法可以实现这一点。

使用 rename() 方法

rename() 方法允许您重命名一个或多个列。您可以传递一个字典或一个函数给 `.以下是中文翻译版本:

# 使用字典重命名单个列
df = df.rename(columns={'Name': '全名'})
print(df)

输出:

       全名  Age       City Country
0        Alice   25  New York     USA
1          Bob   30    London      UK
2      Charlie   35     Paris   France

传递字典给 rename()

你可以传递一个字典给 columns 参数, 其中键是旧列名, 值是新列名.

# 使用字典重命名多个列
df = df.rename(columns={'全名': '参与者', 'Age': '年龄'})
print(df)

输出:

       参与者  年龄       City Country
0        Alice   25  New York     USA
1          Bob   30    London      UK
2      Charlie   35     Paris   France

传递函数给 rename()

你也可以传递一个函数给 columns 参数, 该函数将应用于每个列名.

# 使用函数重命名列
df = df.rename(columns=lambda x: x.lower().replace(' ', '_'))
print(df)

输出:

       participant  years_old       city country
0        alice     25  New York     USA
1          bob     30    London      UK
2      charlie     35     Paris   France

同时重命名多个列

你可以通过传递一个字典或元组列表给 columns 参数来同时重命名多个列.

# 同时重命名多个列
df = df.rename(columns={'participant': 'name', 'years_old': 'age'})
print(df)

输出:

       name  age       city country
0    alice   25  New York     USA
1      bob   30    London      UK
2  charlie   35     Paris   France

直接修改列名

你也可以直接通过访问 DataFrame 的 columns 属性来修改列名.

访问和更新列名

# 访问和更新列名
df.columns = ['姓名', '年龄', '所在地', '国籍']
print(df)

输出: `. 姓名 年龄 位置 国籍 0 alice 25 纽约 美国 1 bob 30 伦敦 英国 2 charlie 35 巴黎 法国

使用列表推导式重命名列

您可以使用列表推导式对列名应用转换。

# 使用列表推导式重命名列
df.columns = [col.upper() for col in df.columns]
print(df)

输出:

       姓名  年龄    位置 国籍
0    alice   25  纽约         美国
1      bob   30    伦敦           英国
2  charlie   35     巴黎        法国

处理缺失或重复的列名

处理列名缺失或重复是很重要的。

识别和解决缺失的列名

# 创建一个有缺失列名的数据框
data = {'姓名': ['Alice', 'Bob', 'Charlie'], '年龄': [25, 30, 35]}
df = pd.DataFrame(data)
print(df)

输出:

       姓名  年龄
0    Alice   25
1      Bob   30
2  Charlie   35

要解决缺失的列名,您可以使用 rename() 方法或直接为 columns 属性赋值。

# 重命名缺失的列
df = df.rename(columns={None: '新列'})
print(df)

输出:

       姓名  年龄     新列
0    Alice   25    NaN
1      Bob   30    NaN
2  Charlie   35    NaN

解决重复的列名

# 创建一个有重复列名的数据框
data = {'姓名': ['Alice', 'Bob', 'Charlie'], '年龄': [25, 30, 35], '姓名': [1, 2, 3]}
df = pd.DataFrame(data)
print(df)

输出:

       姓名  年龄  姓名
0    Alice   25   1
1      Bob   30   2
2  Charlie   35   3

要解决重复的列名,您可以使用 rename() 方法或 set_axis() 方法。

# 解决重复的列名
df = df.rename(columns={'姓名_x': '姓名', '姓名_y': '姓名2'})
print(df)

输出:

       姓名  年龄  姓名2
0    Alice   25     1
1      Bob   30     2
2  Charlie   35     3
```鲍勃   30       2
2  查理   35       3

高级列重命名技术

Pandas 提供了更多高级的列重命名技术。

根据特定模式重命名列

# 根据模式重命名列
data = {'feature_1': [1, 2, 3], 'feature_2': [4, 5, 6], 'target': [10, 20, 30]}
df = pd.DataFrame(data)
df = df.rename(columns=lambda x: x.replace('feature_', 'col_'))
print(df)

输出:

   col_1  col_2  target
0      1      4      10
1      2      5      20
2      3      6      30

使用正则表达式重命名列

# 使用正则表达式重命名列
data = {'feature1_a': [1, 2, 3], 'feature1_b': [4, 5, 6], 'feature2_a': [7, 8, 9]}
df = pd.DataFrame(data)
df = df.rename(columns=lambda x: re.sub(r'feature(\d+)_(\w+)', r'col_\1_\2', x))
print(df)

输出:

   col_1_a  col_1_b  col_2_a
0        1        4        7
1        2        5        8
2        3        6        9

重命名多级列索引中的列

# 重命名多级列索引中的列
data = {('group1', 'A'): [1, 2, 3], ('group1', 'B'): [4, 5, 6], ('group2', 'C'): [7, 8, 9]}
df = pd.DataFrame(data)
df.columns = pd.MultiIndex.from_tuples([('Group 1', 'Feature A'), ('Group 1', 'Feature B'), ('Group 2', 'Feature C')])
df = df.rename(columns=lambda x: ('G 1', x[1]))
print(df)

输出:

   (G 1, Feature A)  (G 1, Feature B)  (G 2, Feature C)
0                 1                 4                 7
1                 2                 5                 8
2                 3                 6                 9

在创建 DataFrame 时重命名列

您也可以在创建 Pandas DataFrame 时重命名列。

在 DataFrame 初始化时传递列名

# 在 DataFrame 初始化时重命名列
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
print(df)
Output:

A B C 0 1 2 3 1 4 5 6 2 7 8 9


### 在从文件读取数据时重命名列

```python
# 在从文件读取数据时重命名列
df = pd.read_csv('data.csv', names=['姓名', '年龄', '城市'])
print(df)

在重命名后保持列顺序

在重命名列时,需要考虑列的顺序。

保留原始列顺序

# 保留原始列顺序
df = df[['姓名', '年龄', '城市']]
print(df)

Output:

       姓名  年龄       城市
0    Alice  25  New York
1      Bob  30    London
2  Charlie  35     Paris

在重命名后重新排序列

# 在重命名后重新排序列
df = df[['城市', '姓名', '年龄']]
print(df)

Output:

       城市       姓名  年龄
0  New York    Alice  25
1    London      Bob  30
2     Paris  Charlie  35

在多个 DataFrame 中应用重命名

在处理多个相关的 DataFrame 时,通常需要确保列命名约定一致。

在相关 DataFrame 中重命名列

# 在相关 DataFrame 中重命名列
df1 = pd.DataFrame({'姓名': ['Alice', 'Bob'], '年龄': [25, 30]})
df2 = pd.DataFrame({'姓名': ['Charlie', 'David'], '城市': ['New York', 'London']})
 
df1 = df1.rename(columns={'姓名': '参与者', '年龄': '年龄'})
df2 = df2.rename(columns={'姓名': '参与者', '城市': '位置'})
 
print(df1)
print(df2)

Output:

   参与者  年龄
0  Alice  25
1    Bob  30

   参与者     位置
0 .

确保列命名约定一致

# 确保列命名约定一致
df1 = df1.rename(columns={'参与者': '姓名', '年龄': '年龄'})
df2 = df2.rename(columns={'参与者': '姓名', '位置': '城市'})
 
print(df1)
print(df2)

Output:

      姓名  年龄
0   Alice  25
1     Bob  30

      姓名     城市
0 .

```查理 纽约
1 大卫 伦敦

## 自动化列重命名工作流程

为了使列重命名更有效率,您可以开发可重复使用的函数并将它们集成到数据处理管道中

## 循环和条件语句

循环和条件语句在Python中是控制程序流程和自动化重复任务的关键。让我们探讨一些常见的循环结构和条件语句。

### For 循环

For 循环用于遍历序列(如列表、元组或字符串)或其他可迭代对象。以下是一个遍历数字列表并打印每个数字的 for 循环示例:

```python
numbers = [1, 2, 3, 4, 5]
for num in numbers:
    print(num)

输出:

1
2
3
4
5

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

for i in range(1, 6):
    print(i)

输出:

1
2
3
4
5

While 循环

While 循环用于在某个条件为真时执行代码块。以下是一个从 5 倒数到 1 的 while 循环示例:

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

输出:

5
4
3
2
1
Blast off!

条件语句

条件语句(如 if-elif-else)允许您根据某些条件做出决策。以下是一个简单的 if-else 语句示例:

age = 18
if age >= 18:
    print("You are an adult.")
else:
    print("You are a minor.")

输出:

You are an adult.

您也可以使用 elif 检查多个条件:

score = 85
if score >= 90:
    print("You got an A!")
elif score >= 80:
    print("You got a B.")
elif score >= 70:
    print("You got a C.")
else:
    print("You need to improve.")

输出:

You got a B.

嵌套循环和条件语句

您还可以在彼此内部嵌套循环和条件语句,以创建更复杂的逻辑。以下是一个示例。以下是中文翻译版本:

一个检查数字是否为质数的嵌套 for 循环示例:

for num in range(2, 21):
    # 假设该数字是质数
    is_prime = True
    for i in range(2, int(num ** 0.5) + 1):
        # 如果该数字能被 i 整除,则它不是质数
        if num % i == 0:
            is_prime = False
            break
    if is_prime:
        print(f"{num} 是一个质数。")
    else:
        print(f"{num} 不是质数。")

输出:

2 是一个质数。
3 是一个质数。
4 不是质数。
5 是一个质数。
6 不是质数。
7 是一个质数。
8 不是质数。
9 不是质数。
10 不是质数。
11 是一个质数。
12 不是质数。
13 是一个质数。
14 不是质数。
15 不是质数。
16 不是质数。
17 是一个质数。
18 不是质数。
19 是一个质数。
20 不是质数。

函数

函数是 Python 的基本构建块。它们允许您将相关的代码组合在一起,使您的程序更加有组织、模块化和可重用。

定义函数

要在 Python 中定义一个函数,您需要使用 def 关键字,后跟函数名、一对括号和一个冒号。函数体中的代码需要缩进。

下面是一个简单的函数示例,它向用户问候:

def greet(name):
    print(f"你好, {name}!")
 
greet("Alice")

输出:

你好, Alice!

您也可以定义接受多个参数的函数:

def add_numbers(a, b):
    return a + b
 
result = add_numbers(5, 3)
print(result)

输出:

8

默认和关键字参数

函数可以有默认参数,当在函数调用时未提供参数时使用这些参数。下面是一个示例:

def greet(name, message="你好"):
    print(f"{message}, {name}!")
 
greet("Alice")
greet("Bob", "嗨")

输出:

你好, Alice!
嗨, Bob!

您还可以使用关键字参数调用函数,这可以使代码更具可读性:

def calculat.这是中文翻译版本:
 
e_area(长度, 宽度):
    返回长度 * 宽度
 
# 使用关键字参数
面积 = calculate_area(长度=5, 宽度=3)
print(面积)

输出:

15

作用域和变量生命周期

变量的作用域决定了它在代码中可以被访问的位置。Python 有局部作用域和全局作用域。在函数内部定义的变量有局部作用域,而在函数外部定义的变量有全局作用域。

下面是一个演示两种作用域差异的例子:

全局变量 = "我是全局的!"
 
def my_function():
    局部变量 = "我是局部的."
    print(全局变量)
    print(局部变量)
 
my_function()
print(全局变量)
# print(局部变量)  # 这将会引发错误

输出:

我是全局的!
我是局部的.
我是全局的!

注意,局部变量无法在 my_function() 函数外部访问,因为它有局部作用域。

递归函数

递归函数是调用自身来解决问题的函数。下面是一个计算阶乘的递归函数示例:

def 阶乘(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n * 阶乘(n - 1)
 
print(阶乘(5))

输出:

120

在这个例子中,阶乘() 函数会不断调用自身,直到达到基准情况(当 n 为 0 或 1 时),此时返回 1。

模块和包

在 Python 中,模块和包用于组织和重用代码。模块是单个的 Python 文件,而包是相关模块的集合。

导入模块

要使用模块中的代码,需要先导入它。下面是一个导入内置 math 模块的例子:

import math
 
print(math.pi)
print(math.sqrt(16))

输出:

3.141592653589793
4.0

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

from math import pi, sqrt
 
print(pi)
print(sqrt(16))

输出:

3.141592653589793
4.0

创建模块要创建自己的模块,只需将 Python 代码保存在以 .py 扩展名结尾的文件中。例如,让我们创建一个名为 my_module.py 的模块,其中包含一个名为 greet() 的函数:

# my_module.py
def greet(name):
    print(f"Hello, {name}!")

您可以在另一个 Python 文件中导入并使用 greet() 函数:

# main.py
import my_module
 
my_module.greet("Alice")

输出:

Hello, Alice!

包用于将相关模块组织成层次结构。要创建一个包,您需要创建一个带有 __init__.py 文件的目录。下面是一个示例:

my_package/
    __init__.py
    math_utils.py
    string_utils.py

__init__.py 文件可以为空,但 Python 需要它来识别该目录为一个包。

您可以从包中的模块导入函数:

# main.py
from my_package.math_utils import add
from my_package.string_utils import reverse
 
print(add(5, 3))
print(reverse("hello"))

输出:

8
olleh

结论

在本教程中,您已经学习了循环、条件语句、函数、模块和包等 Python 的基本概念。这些工具是在 Python 中构建强大和动态程序的基础。

记住,提高 Python 技能的最佳方式是练习、实验和继续学习。探索 Python 库和模块的广阔生态系统,并不要犹豫深入官方 Python 文档以获取更深入的信息。

祝您编码愉快!

MoeNagy Dev.