Pandas 中如何用列名列表批量传递多列数据给函数

发布时间 - 2025-12-27 00:00:00    点击率:

本文介绍在 pandas 中通过列名列表动态选取多列,并利用 `apply()` 和解包操作符 `*` 将其高效传入自定义函数的方法,避免手动书写冗长的列引用,提升代码可维护性与扩展性。

在使用 Pandas 进行数据处理时,常需将多列数据联合传入自定义函数(如特征工程、复合计算等)。当列数较多(例如 A–J 共 10 列)时,逐个写 x.A, x.B, ..., x.J 不仅繁琐,还易出错且难以维护。理想方案是:先将列名存入列表,再统一提取并解包传参

核心技巧在于两点:

  1. 使用 df[cols] 按列名列表索引子 DataFrame(返回按指定顺序排列的列);
  2. 在 apply() 的 lambda 中,用 *x 将每行 Series 解包为位置参数,自动匹配函数形参。

以下为完整示例:

import pandas as pd
import numpy as np

np.random.seed(26)
df = pd.DataFrame(np.random.randint(10, size=(3, 3)), columns=list('ABC'))
print("原始数据:")
print(df)
#    A  B  C
# 0  5  6  0
# 1  1  6  3
# 2  0  4  2

def myfunction(a, b, c):
    return (a, b, c)  # 示例:返回元组

cols = ['A', 'B', 'C']  # ✅ 列名列表,支持任意长度和顺序
df['out'] = df[cols].apply(lambda x: myfunction(*x), axis=1)
print("\n添加计算结果列:")
print(df)
#    A  B  C        out
# 0  5  6  0  (5, 6, 0)
# 1  1  6  3  (1, 6, 3)
# 2  0  4  2  (0, 4, 2)

⚠️ 注意事项:

  • 函数形参顺序必须与 cols 列表中列名的顺序严格一致;
  • df[cols].apply(..., axis=1) 返回的是 Series,每行 x 是一个 pd.Series,*x 会按索引顺序(即 cols 顺序)解包其值;
  • 若函数需处理缺失值,建议在函数内部增加 pd.isna() 判断,或提前用 dropna(subset=cols) 过滤;
  • 对于性能敏感场景,优先考虑向量化操作(如 np.where, pd.cut)或 numba 加速,apply(axis=1) 在大数据量下较慢。

该方法简洁、通用、可读性强,是 Pandas 高级用法中的实用范式。


# 大数据  # app  # 排列  # pandas  # Lambda  # 形参  # 自定义  # 的是  # 是一个  # 将其  # 较多  # 数据处理  # 先将  # 较慢  # 两点  # 顺序排列 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  如何快速查询网站的真实建站时间?  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何获取上海专业网站定制建站电话?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  如何在阿里云服务器自主搭建网站?  Laravel怎么使用artisan命令缓存配置和视图  网站页面设计需要考虑到这些问题  SQL查询语句优化的实用方法总结  网站制作报价单模板图片,小松挖机官方网站报价?  魔方云NAT建站如何实现端口转发?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  北京企业网站设计制作公司,北京铁路集团官方网站?  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  如何在IIS中新建站点并解决端口绑定冲突?  Laravel如何处理表单验证?(Requests代码示例)  如何在服务器上配置二级域名建站?  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  如何用IIS7快速搭建并优化网站站点?  英语简历制作免费网站推荐,如何将简历翻译成英文?  Bootstrap整体框架之CSS12栅格系统  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  如何批量查询域名的建站时间记录?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  Laravel如何保护应用免受CSRF攻击?(原理和示例)  如何获取免费开源的自助建站系统源码?  如何在IIS7上新建站点并设置安全权限?  轻松掌握MySQL函数中的last_insert_id()  *服务器网站为何频现安全漏洞?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  Laravel API资源类怎么用_Laravel API Resource数据转换  高防服务器租用如何选择配置与防御等级?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  大型企业网站制作流程,做网站需要注册公司吗?  详解Huffman编码算法之Java实现  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  Laravel如何使用Livewire构建动态组件?(入门代码)  java中使用zxing批量生成二维码立牌  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  Laravel怎么为数据库表字段添加索引以优化查询