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

如何在Pandas中批量重命名DataFrame列名,仅提取并格式化姓名部分

解决Pandas DataFrame批量重命名列名(提取姓名并格式化)

嘿,这个需求处理起来很直接,核心是用正则表达式提取姓名部分,再格式化姓名的显示方式。我给你分步拆解:

思路分析

你的列名格式是Gr[组号][ID][姓名全称],比如Gr1234AdamSmith,我们需要:

  1. 从列名中剥离掉开头的Gr+数字部分,只保留姓名(比如AdamSmith)
  2. 把连续的姓名拆分成“名+姓”的格式,在大写字母前插入空格(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中捕获到AdamSmith
  • re.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:54:06