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

如何通过单行代码重命名列并调整列名中数字的位置

Pandas 批量重命名分组列的解决方案

核心逻辑

  • 仅需要定义每组内4种列类型到新名称前缀的映射,无需手动编写16组键值对的大型字典
  • 用正则一次性匹配列名中的分组数字和列类型,直接查表拼接生成目标列名
  • 支持所有4组共16列的自动匹配,其他非CHARGE开头的列会保留原名不受影响

单行实现代码

Python 3.8+ 支持海象运算符的场景,直接运行以下代码即可:

import re; df.rename(columns=lambda x: (m:=re.match(r'CHARGE (\d+) (\w+)', x)) and {'STATUTE':f'ChrgStatute{m.group(1)}','DESCRIPTION':f'ChrgDesc{m.group(1)}','TYPE':'ArrstngChrgFelMisd','CLASS':f'ArrstngChrgSvrtyOrgnl{m.group(1)}'}[m.group(2)] or x)

如果使用低于Python 3.8的版本,不支持海象运算符,可用以下兼容版本:

import re; df.rename(columns=lambda x: {'STATUTE':f'ChrgStatute{re.search(r"CHARGE (\d+) (\w+)",x).group(1)}','DESCRIPTION':f'ChrgDesc{re.search(r"CHARGE (\d+) (\w+)",x).group(1)}','TYPE':'ArrstngChrgFelMisd','CLASS':f'ArrstngChrgSvrtyOrgnl{re.search(r"CHARGE (\d+) (\w+)",x).group(1)}'}[re.search(r"CHARGE (\d+) (\w+)",x).group(2)] if re.match(r"CHARGE (\d+) (\w+)",x) else x)

效果验证

拿你给出的示例测试:

orig = ["CHARGE 1 STATUTE", "CHARGE 1 DESCRIPTION", "CHARGE 1 TYPE", "CHARGE 1 CLASS"]
重命名后的输出结果完全匹配你的预期:
['ChrgStatute1', 'ChrgDesc1', 'ArrstngChrgFelMisd', 'ArrstngChrgSvrtyOrgnl1']
组号为2/3/4的列也会自动对应拼接正确的数字后缀,不需要额外调整代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:42:03