本文介绍如何高效地将一个返回多值的自定义函数(如 `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_to_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
相关文章:
建站之星代理商如何保障技术支持与售后服务?
如何配置FTP站点权限与安全设置?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
如何用wdcp快速搭建高效网站?
建站主机如何选?高性价比方案全解析
网站制作服务平台,有什么网站可以发布本地服务信息?
专业公司网站制作公司,用什么语言做企业网站比较好?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
如何在腾讯云免费申请建站?
建站主机选哪种环境更利于SEO优化?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
寿县云建站:智能SEO优化与多行业模板快速上线指南
重庆网站制作公司哪家好,重庆中考招生办官方网站?
高防服务器租用指南:配置选择与快速部署攻略
制作门户网站的参考文献在哪,小说网站怎么建立?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
如何快速查询网址的建站时间与历史轨迹?
表情包在线制作网站免费,表情包怎么弄?
如何通过山东自助建站平台快速注册域名?
网页设计与网站制作内容,怎样注册网站?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
宝塔新建站点报错如何解决?
常州自助建站工具推荐:低成本搭建与模板选择技巧
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
如何在IIS中新建站点并解决端口绑定冲突?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
临沂网站制作公司有哪些,临沂第四中学官网?
做企业网站制作流程,企业网站制作基本流程有哪些?
广州建站公司哪家好?十大优质服务商推荐
如何解决ASP生成WAP建站中文乱码问题?
建站上传速度慢?如何优化加速网站加载效率?
javascript中对象的定义、使用以及对象和原型链操作小结
如何通过VPS搭建网站快速盈利?
如何在IIS中新建站点并配置端口与物理路径?
建站之星多图banner生成与模板自定义指南
电商网站制作价格怎么算,网上拍卖流程以及规则?
如何通过万网虚拟主机快速搭建网站?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
定制建站方案优化指南:企业官网开发与建站费用解析
XML的“混合内容”是什么 怎么用DTD或XSD定义
如何设计高效校园网站?
建站之星如何一键生成手机站?
*请认真填写需求信息,我们会在24小时内与您取得联系。