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

Pandas中使用lstrip按条件重命名列不生效问题排查

错误原因

你的列名修改不生效有两个核心问题:

  • df2.iloc[:,1:3] 是从原DataFrame切出来的临时对象,可能是视图也可能是副本,本质不是原始df2本身。你给这个临时生成的对象改columns属性,操作只会作用在临时对象上,代码运行完临时对象就被回收了,根本不会同步修改原始df2的结构。
  • 切片范围写错了:pandas的位置切片是左闭右开规则,iloc[:,1:3] 只会选中列索引为1、2的两列(也就是d1_ads、d7_ads),会漏掉最后一列d30_ads,哪怕赋值逻辑正确也改不全所有目标列。
正确实现方案

直接操作原始DataFrame的columns属性,或者用官方提供的rename方法改列名,不要在切片上改属性,两种常用写法如下:

方案1:按列位置批量修改

直接取全量列名,保留第一列原名,对后面的列统一做去首字母d的处理,再整体赋值给原表的columns:

# 列范围写1:是因为要取从索引1开始到最后一列的所有目标列,避免漏列
df2.columns = df2.columns[:1].to_list() + df2.columns[1:].str.lstrip("d").to_list()

方案2:按列名规则匹配修改

不需要记列位置,用rename加lambda表达式,只对符合规则的列做修改,更不容易出错:

# 只对后缀是_ads的列去掉首字母d,date列不符合规则会自动保留原名
df2 = df2.rename(columns=lambda col_name: col_name.lstrip("d") if col_name.endswith("_ads") else col_name)

执行上述任意一段代码后,打印df2就能得到你预期的结果:

date  1_ads  7_ads  30_ads
0  2020-08-01      3      8      12
1  2020-09-01      5      9      10
2  2020-10-01      6     15      22

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:36:24