You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas筛选含BPS的列计算后回写原数据集的实现方法

问题描述

现有大型Pandas DataFrame,需完成如下处理:

  • 筛选出列名包含特定短语(如BPS)的列
  • 对筛选出的列内所有数值统一除以10000
  • 将计算结果替换回原数据集对应列,其余列保持不变

目前可通过代码筛选出目标列,但无法将处理结果正确回写到原数据集。之前尝试的代码如下:

raw = raw.filter(like = 'BPS', axis = 1) / 10000

上述写法只会返回处理后的目标列,原数据中其他列会被丢弃,不符合需求。希望找到最简洁清晰的实现方式,尽量避免冗余的自定义函数。

解决方案

直接通过列定位批量赋值即可,一行代码就能完成全流程,对大型数据集也很友好:

# 匹配所有列名包含'BPS'的列(忽略大小写),原地完成除法计算和回写
raw.loc[:, raw.columns.str.contains('BPS', case=False)] /= 10000

如果需要严格匹配大小写,删除参数case=False即可。

写法说明

  • raw.columns.str.contains('BPS')会生成对应列的布尔选择掩码,比filter方法更适配批量赋值的场景
  • loc[:, 列选择掩码]会精准定位所有目标列的位置,配合/=原地计算符直接更新对应列的值,不会改动非目标列的任何数据,也不会生成多余的DataFrame副本,内存开销更低
  • 逻辑直白,不需要额外写自定义函数,也不需要做拆分、拼接DataFrame的操作,后续如果要调整匹配规则(比如换正则匹配、改匹配关键词)也很方便

如果更习惯用filter的匹配逻辑,也可以用下面的等价写法:

raw[raw.filter(like='BPS').columns] /= 10000

只是从灵活性角度看,str.contains的方案适配场景更广。

内容的提问来源于stack exchange,提问作者BPD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:30:51