如何重命名匹配正则表达式的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
相关产品推荐
相关产品推荐

