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

如何重命名匹配正则表达式的Pandas DataFrame列(兼容无匹配场景)

解决方案:一行代码实现Pandas列名正则匹配重命名(兼容无匹配列场景)

直接使用pandas.DataFrame.rename()方法配合正则表达式替换,对每个列名单独处理——匹配正则的列按规则重命名,不匹配的保持原名,彻底避免列表推导式的长度不匹配问题:

import pandas as pd
import re

languages = {'ka':1,'en':2,'ru':3}

# 处理含匹配列的DataFrame
df_with_matches = pd.DataFrame(columns=['Name (Ka)', 'Name (En)', 'Name (Ru)', 'Description', 'Image'])
df_with_matches_renamed = df_with_matches.rename(columns=lambda col: re.sub(r'^Name \(([A-Za-z]+)\)$', lambda m: f'name_lang{languages[m.group(1).lower()]}', col))

# 处理无匹配列的DataFrame
df_no_matches = pd.DataFrame(columns=['Description', 'Image'])
df_no_matches_renamed = df_no_matches.rename(columns=lambda col: re.sub(r'^Name \(([A-Za-z]+)\)$', lambda m: f'name_lang{languages[m.group(1).lower()]}', col))

关键逻辑说明

  • 正则表达式r'^Name \(([A-Za-z]+)\)$'精准匹配Name (Xxx)格式的列名,捕获括号内的语言代码
  • 嵌套lambda函数:外层lambda遍历每个列名,内层lambda将捕获到的语言代码转小写后,映射到languages字典的数字值,生成新列名
  • re.sub()在无匹配时会返回原列名,因此无论DataFrame是否有匹配列,列数始终保持一致,不会触发长度不匹配错误

结果验证

  • df_with_matches_renamed.columns输出:['name_lang1', 'name_lang2', 'name_lang3', 'Description', 'Image']
  • df_no_matches_renamed.columns输出:['Description', 'Image']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:45:08