导读:本期聚焦于小伙伴创作的《如何在 Pandas 中通过列名列表批量传递多列参数给 apply 函数》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在 Pandas 中通过列名列表批量传递多列参数给 apply 函数》有用,将其分享出去将是对创作者最好的鼓励。

在Pandas的数据处理场景中,apply函数是灵活处理行或列数据的常用工具,当我们需要对多个指定列做相同逻辑的处理时,手动逐个传入列名会非常繁琐,通过列名列表批量传递多列参数可以有效解决这个问题。

如何在 Pandas 中通过列名列表批量传递多列参数给 apply 函数

apply函数的基本使用逻辑

apply函数可以作用于DataFrame的行或列,默认按列处理,通过axis参数可以控制处理方向,axis=1表示按行处理,此时传递给处理函数的会是每一行的数据,我们可以通过列名来获取对应列的值。

首先我们先创建一个测试用的DataFrame,后续示例都基于这个数据:

import pandas as pd

# 创建测试DataFrame
data = {
    "math": [90, 85, 78, 92],
    "chinese": [88, 92, 85, 90],
    "english": [76, 89, 91, 87],
    "name": ["张三", "李四", "王五", "赵六"]
}
df = pd.DataFrame(data)
print(df)

方案一:按行处理时直接传入列名列表

当我们需要按行处理多个列的数据时,可以先定义需要处理的列名列表,然后在apply的处理函数中通过列名列表批量获取对应列的值,这种方式适合需要对多个列做相同运算的场景。

比如我们需要计算math、chinese、english三科的总分,就可以用这种方式实现:

# 定义需要处理的列名列表
score_columns = ["math", "chinese", "english"]

# 定义处理函数,row是每一行的数据,通过列名列表批量获取值
def calc_total_score(row):
    # 用列表推导式批量获取所有目标列的值并求和
    total = sum([row[col] for col in score_columns])
    return total

# 按行处理,axis=1
df["total_score"] = df.apply(calc_total_score, axis=1)
print(df)

这种方式的优势是逻辑清晰,处理函数内部可以灵活调整对每个列的处理逻辑,如果不同列需要不同的处理规则也可以很方便地修改。

方案二:通过双括号传入多列构建子DataFrame

除了按行处理的方式,我们还可以通过DataFrame的双括号语法,直接传入列名列表获取对应的多列子DataFrame,然后将这个子DataFrame传递给apply函数处理,这种方式不需要设置axis参数,默认按列处理子DataFrame。

同样以计算三科总分为例,实现方式如下:

# 定义需要处理的列名列表
score_columns = ["math", "chinese", "english"]

# 直接传入列名列表获取子DataFrame,然后调用apply计算每行的和
# apply的参数是sum,会对子DataFrame的每一行求和
df["total_score"] = df[score_columns].apply(sum, axis=1)
print(df)

这种方式代码更简洁,适合处理逻辑比较简单,只需要对多列做统一的聚合运算的场景,不需要额外定义处理函数。

两种方案的对比和适用场景

方案优势适用场景
按行处理传入列名列表处理逻辑灵活,可自定义不同列的处理规则需要对多列做复杂逻辑处理,不同列处理规则有差异的情况
双括号传入多列子DataFrame代码简洁,无需额外定义函数处理逻辑简单,只需要对多列做统一聚合运算的情况

注意事项

  • 列名列表中的列名必须存在于DataFrame中,否则会抛出KeyError错误
  • 按行处理时必须要设置axis=1,否则apply会默认按列处理,导致获取不到对应的值
  • 如果列名包含特殊字符或者空格,需要用英文下划线_替换空格后使用,或者在列名列表中用字符串形式正确书写列名
如果需要处理的列是连续的,也可以使用df.iloc[:, start_col:end_col]的方式获取列范围,再传递给apply函数,不需要手动列出所有列名。

Pandasapply函数列名列表批量传参dataframe修改时间:2026-06-18 03:36:31

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。