如何在 Pandas DataFrame 中仅对指定索引行应用向量化函数
发布时间 - 2025-12-30 00:00:00 点击率:次本文介绍如何高效地将一个返回多值的自定义函数(如 `computeleft`)仅应用于 dataframe 的特定行索引,其余位置自动填充为 nan,避免全量计算,兼顾性能与可读性。
在实际数据处理中,我们常需对 DataFrame 的部分行(而非全部)执行复杂计算,并将结果写入多个列。例如,函数 computeLeft(i) 接收索引 i,返回长度为 4 的 NumPy 数组 [2i, 3i, 4i, 5i],期望将其结果分别填入 ["val1", "val2", "val3", "val4"] 四列中——但仅针对指定索引(如 [2, 5, 7, 8, 10])的行,其余行对应位置应保持为 NaN。
直接使用 np.vectorize 全量计算(如 df[results] = np.vectorize(...)(range(len(df))))虽可行,但效率低且不满足“按需计算”需求。更优解是:先初始化目标列为 NaN,再通过 .loc 精准赋值。具体步骤如下:
-
确保函数签名正确:computeLeft 应返回标准 NumPy 数组(非 Python list),并用 np.vectorize 显式声明输出形状(signature="()->(4)"):
def computeLeft(i): return np.array([i*2, i*3, i*4, i*5]) computeLeft_vec = np.vectorize(computeLeft, signature="()->(4)") -
预分配目标列并填充 NaN:
results = ["val1", "val2", "val3", "val4"] df[results] = np.nan # 所有行初始化为 NaN
-
使用 .loc 对指定索引批量赋值:
indices_to_change = [2, 5, 7, 8, 10] df.loc[indices_t
o_change, results] = computeLeft_vec(indices_to_change)✅ 关键点:indices_to_change 必须与 DataFrame 的实际索引标签(index labels)匹配(而非位置序号 iloc)。若 df.index 是默认整数索引(RangeIndex),则二者一致;若索引已重设(如字符串或非连续整数),请确保传入的是真实索引值。
⚠️ 注意事项: np.vectorize 本质是语法糖,不提升性能;若 computeLeft 可向量化(如纯算术运算),建议直接用 NumPy 原生向量化(例如 np.array(indices_to_change)[:, None] * [2,3,4,5]),速度可提升数十倍。 若需处理缺失索引(如 df 不含索引 7),.loc 会自动扩展 DataFrame(添加新行),若需严格限制仅修改现有索引,可先校验:valid_indices = [i for i in indices_to_change if i in df.index]。 替代方案(如 df.iloc + 位置映射)适用于基于整数位置的场景,但需额外转换索引→位置,易出错,推荐优先使用 .loc 配合语义清晰的索引标签。
此方法简洁、安全、符合 Pandas 惯例,既避免冗余计算,又保证结果的稀疏性与可维护性。
# python
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
PythonWeb开发入门教程_Flask快速构建Web应用
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
微信h5制作网站有哪些,免费微信H5页面制作工具?
Laravel如何使用Vite进行前端资源打包?(配置示例)
Android实现代码画虚线边框背景效果
如何在搬瓦工VPS快速搭建网站?
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
Laravel如何发送系统通知?(Notification渠道示例)
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
JavaScript如何实现错误处理_try...catch如何捕获异常?
教你用AI润色文章,让你的文字表达更专业
如何用腾讯建站主机快速创建免费网站?
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
北京企业网站设计制作公司,北京铁路集团官方网站?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
手机网站制作与建设方案,手机网站如何建设?
如何解决hover在ie6中的兼容性问题
如何用y主机助手快速搭建网站?
Android利用动画实现背景逐渐变暗
微信推文制作网站有哪些,怎么做微信推文,急?
独立制作一个网站多少钱,建立网站需要花多少钱?
Laravel模型事件有哪些_Laravel Model Event生命周期详解
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
C语言设计一个闪闪的圣诞树
如何在阿里云高效完成企业建站全流程?
七夕网站制作视频,七夕大促活动怎么报名?
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
新三国志曹操传主线渭水交兵攻略
Laravel如何使用.env文件管理环境变量?(最佳实践)
Laravel如何自定义错误页面(404, 500)?(代码示例)
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
如何在香港服务器上快速搭建免备案网站?
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
如何在Windows虚拟主机上快速搭建网站?
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
如何快速搭建高效香港服务器网站?
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
html如何与html链接_实现多个HTML页面互相链接【互相】
Laravel如何与Inertia.js和Vue/React构建现代单页应用
如何快速搭建高效WAP手机网站吸引移动用户?
Laravel distinct去重查询_Laravel Eloquent去重方法


o_change, results] = computeLeft_vec(indices_to_change)