Pandas基础05(数据的映射/replace()、rename()、map()、apply() 和 transform())

数据映射:使用 Pandas 进行高效的数据处理

在数据分析中,我们经常需要对数据进行处理、转换和映射。Pandas 提供了许多强大的方法来帮助我们高效地完成这些任务。本文将介绍几个常用的映射函数,并展示它们在实际数据处理中的应用。具体来说,我们将介绍 replace()rename()map()apply()transform() 函数,这些都是非常常见的用于数据映射的操作。

1. replace() 函数:替换元素

replace() 函数在 Pandas 中非常常用,用于替换 DataFrame 或 Series 中的指定值。它接受一个字典类型的参数,可以一次性替换多个值。

示例:

import pandas as pd
import numpy as np

# 创建 DataFrame
df = pd.DataFrame(np.random.randint(1, 100, (4, 3)), index=["zhangsan", "lisi", "wangwu", "zhouliu"], columns=["Chinese", "Math", "English"])

# 使用 replace() 替换值
df.replace({65: 95})  # 将值 65 替换为 95
df.replace({65: 95, 17: 71})  # 同时替换多个值

在这个示例中,我们通过 replace() 轻松替换了指定的元素值。这个方法特别适用于对 DataFrame 或 Series 中的数值进行批量替换。

2. rename() 函数:替换索引

rename() 函数用于替换行索引或列索引。可以通过指定 axis=0axis=1 来分别修改行索引和列索引。

示例:

# 修改行索引
df2 = df.copy()
df2.rename({'zhangsan': '张三'}, axis=0)  # 修改行索引
df2.rename(index={'zhangsan': '张三'})  # 同样的效果

# 修改列索引
df2.rename({'Math': '数学'}, axis=1)  # 修改列索引
df2.rename(columns={'Math': '数学'})  # 同样的效果

rename() 使得我们能够轻松地重命名 DataFrame 的行索引和列索引,帮助我们使数据集更符合业务需求。

3. map() 函数:处理单独的列

map() 函数是一个用于 Series 的方法,它非常适合处理某一列数据的映射操作。可以通过传入 lambda 表达式或自定义函数,对列数据进行批量转换。

示例:

python# 使用 lambda 表达式判断英语成绩是否及格
df3 = df.copy()
s = df3['English'].map(lambda x: '及格' if x >= 60 else '不及格')
df3["英语成绩评级"] = s

map() 适用于简单的元素级操作,比如在此示例中我们通过 lambda 表达式将每个英语成绩转化为“及格”或“不及格”。

map() 还支持使用自定义函数进行转换:

# 使用自定义函数映射成绩等级
def score(x):
    if x >= 90:
        return 'A'
    elif x >= 80:
        return 'B'
    elif x >= 60:
        return 'C'
    else:
        return 'D'

s = df3['English'].map(score)
df3["英语成绩评级"] = s

在这个示例中,我们通过自定义的 score 函数根据英语成绩将每个学生的成绩分为 A、B、C 和 D 等级。

4. apply() 函数:处理 Series 和 DataFrame

apply() 是一个更为通用的函数,它不仅可以应用于 Series,还可以应用于 DataFrameapply() 可以处理数据框中的每一列或每一行,执行复杂的操作。

示例:

# 对某一列进行处理
df4 = df.copy()
df4['Chinese'].apply(lambda x: x + 100)  # 对中文成绩列中的每个元素加 100

# 对 DataFrame 中的每列计算均值
df4.apply(lambda x: x.mean())  # 计算每列的均值

apply() 使得我们能够处理整个列或行。通过设置 axis=0axis=1 参数,apply() 可以灵活地在行或列之间进行计算。

更多应用:

# 对 DataFrame 每个元素进行平方
df4.applymap(lambda x: x ** 2)  # 仅适用于 DataFrame 的每个元素

applymap()apply() 的变种,它只能用于 DataFrame,用于处理 DataFrame 中的每一个元素。

5. transform() 函数:多个运算

transform() 主要用于对 Series 进行多个运算。与 apply() 相比,transform() 可以同时返回多个变换结果,并且保持原数据的形状。

示例:

# 使用 transform 进行多个运算
df5 = df.copy()
df5['Chinese'].transform([np.sqrt, np.sin])  # 对中文成绩列同时进行开方和正弦运算
df5['Chinese'].transform(lambda x: x + 10)  # 对中文成绩列加 10

transform() 适用于需要返回多个变换结果的场景。它的应用场景非常广泛,尤其是在对 Series 数据进行多步骤处理时非常有用。

你可能感兴趣的:(数据分析与可视化,pandas)