详解Pandas的三大利器(map,apply,applymap)

Mason
Mason
发布时间:2026-10-15| 2人浏览过
原创

本文深入解析Pandas中处理数据的三大核心函数:map、apply和applymap。通过模拟数据演示,详细对比三者在Series与DataFrame上的应用差异,涵盖性别映射、数值运算及BMI计算等实际案例,帮助开发者高效完成数据清洗与转换任务。

在实际的数据处理工作中,我们常需对数据框中的单行、多行(列同理)乃至整个数据集执行统一的转换逻辑。例如,将“sex”字段中的“男”替换为1,“女”替换为0,这类批量操作是数据预处理中的常见需求。

面对此类需求,初学者往往首先想到使用for循环。虽然这种方式直观且易于理解,但其运行效率较低,尤其在处理大规模数据时性能瓶颈明显。为此,本文重点介绍Pandas中高效解决此类需求的三大工具:map、apply和applymap。

  • map
  • apply
  • applymap

模拟数据

为了清晰展示这三个函数的具体用法,我们构建一个包含多种数据类型的模拟数据集。通过该示例,读者可以掌握如何生成各类模拟数据。具体数据结构如下:

import pandas as pd
import numpy as np

boolean = [True, False]
gender = ["男","女"]
color = ["white","black","red"]

# 好好学习如何生成模拟数据:非常棒的例子
# 学会使用random模块中的randint方法

df = pd.DataFrame({"height":np.random.randint(160,190,100),
                     "weight":np.random.randint(60,90,100),
                     "smoker":[boolean[x] for x in np.random.randint(0,2,100)],
                     "gender":[gender[x] for x in np.random.randint(0,2,100)],
                     "age":np.random.randint(20,60,100),
                     "color":[color[x] for x in np.random.randint(0,len(color),100)]
                    })
df.head()

1、map

demo

map()函数的核心作用是对指定序列进行映射操作。

该函数接收两个主要参数:function和iterable。它会遍历序列中的每个元素,调用提供的function函数,并返回一个包含每次调用返回值的新列表。

map(function, iterable)

实际数据

以实际数据为例,我们需要将“gender”列中的“男”转换为1,“女”转换为0。

# 方式1:通过字典映射实现
dic = {"男":1, "女":0}  # 通过字典映射
df1 = df.copy()   # 副本,不破坏原来的数据df
df1["gender"] = df1["gender"].map(dic)
df1

# 方式2:通过函数实现
def map_gender(x):
    gender = 1 if x == "男" else 0
    return gender

df2 = df.copy()
# 将df["gender"]这个S型数据中的每个数值传进去
df2["gender"] = df2["gender"].map(map_gender)
df2

2、apply

apply方法的作用机制与map类似,但其优势在于能够接收功能更复杂的函数,因此可视为map的高级版本。

Pandas的apply()函数可作用于Series或整个DataFrame。其工作原理是自动遍历Series或DataFrame中的每个元素,并对每个元素执行指定的函数操作。

在DataFrame的多数方法中,存在一个axis参数,用于控制操作沿0轴(列columns)还是1轴(行row)进行。其中,axis=0表示对列执行操作,axis=1表示对行执行操作。

demo

基于上述数据,我们将“age”字段的值统一减去3(即加上-3)。

def apply_age(x,bias):
    return x + bias

df4 = df.copy()
# df4["age"]当做第一个值传给apply_age函数,args是第二个参数
df4["age"] = df4["age"].apply(apply_age,args=(-3,))

计算BMI指数

# 实现计算BMI指数:体重/身高的平方(kg/m^2)
def BMI(x):
    weight = x["weight"]
    height = x["height"] / 100
    BMI = weight / (height **2)

    return BMI

df5 = df.copy()
df5["BMI"] = df5.apply(BMI,axis=1)  # df5现在就相当于BMI函数中的参数x;axis=1表示在列上操作
df5

针对DataFrame型数据的apply操作,可总结为以下几点:

  1. 当axis=0时,对每一列columns执行指定函数;当axis=1时,对每一行row执行指定函数。
  2. 无论axis取0还是1,传入指定函数的默认形式均为Series对象。若需传入numpy数组,可通过设置raw=True实现。
  3. 对每个Series执行函数后,结果会被整合并返回。若需保留计算结果,定义函数时必须包含相应的return语句。

apply实现需求

接下来,我们通过apply方法实现前述的性别转换需求。需注意,apply方法接收的第一个参数必须是一个函数。

3、applymap

DF数据加1

applymap函数用于对DataFrame型数据中的每个元素执行相同的函数操作,例如对所有元素加1:

保留2位有效数字

至此,关于Pandas三大核心函数map、apply和applymap的详细解析已介绍完毕。如需了解更多相关内容,可查阅本站过往文章或继续浏览后续内容,感谢大家的支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。