如何在Pandas中批量重命名DataFrame列名,仅提取并格式化姓名部分
解决Pandas DataFrame批量重命名列名(提取姓名并格式化)
嘿,这个需求处理起来很直接,核心是用正则表达式提取姓名部分,再格式化姓名的显示方式。我给你分步拆解:
思路分析
你的列名格式是Gr[组号][ID][姓名全称],比如Gr1234AdamSmith,我们需要:
- 从列名中剥离掉开头的
Gr+数字部分,只保留姓名(比如AdamSmith) - 把连续的姓名拆分成“名+姓”的格式,在大写字母前插入空格(
AdamSmith→Adam Smith)
代码实现
首先导入必要的库,然后写一个处理单个列名的函数,最后用Pandas的rename方法批量处理所有列:
import re import pandas as pd def format_column_name(col): # 第一步:匹配并提取姓名部分 # 正则说明:Gr\d+ 匹配开头的Gr加数字,(\w+)捕获后面的姓名部分 name_match = re.search(r'Gr\d+(\w+)', col) if name_match: raw_name = name_match.group(1) # 第二步:在大写字母前插入空格(排除第一个字符) formatted_name = re.sub(r'(?<!^)([A-Z])', r' \1', raw_name) return formatted_name # 如果列名不符合格式,返回原名称避免报错 return col # 假设你的DataFrame名为df,执行重命名 df.rename(columns=format_column_name, inplace=True)
代码解释
re.search(r'Gr\d+(\w+)', col):精准定位列名中Gr+数字之后的所有字母,也就是你的姓名部分,比如从Gr1234AdamSmith中捕获到AdamSmithre.sub(r'(?<!^)([A-Z])', r' \1', raw_name):使用正向否定断言(?<!^),确保不在字符串开头的大写字母前插入空格,完美把连续姓名拆分成带空格的格式inplace=True:直接修改原DataFrame,如果不想修改原数据,可以去掉这个参数,把结果赋值给新变量(比如new_df = df.rename(columns=format_column_name))
示例验证
输入列名:Gr1234AdamSmith → 输出:Adam Smith
输入列名:Gr2567DavidBlake → 输出:David Blake
这个方法可以轻松处理你500列的批量重命名,而且容错性强,遇到不符合格式的列名会保留原样,不会导致程序崩溃。
内容的提问来源于stack exchange,提问作者Santosh
相关产品推荐
相关产品推荐

