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

如何用Pandas将所有列中姓名的中间名改为首字母,保留首尾名?

Pandas字符串处理:保留首尾单词,中间取首字母

你的代码问题分析

你的函数有两个核心问题:

  1. 循环范围错误:range(len(l)-1)会把第一个单词也纳入循环,导致原本要完整保留的首词被改成了首字母
  2. 重复追加尾词:每次循环里都执行new += l[-1].title(),会让最后一个单词被重复添加多次

正确的处理函数

先写一个能实现需求的函数,每一步都加注释方便理解:

def format_name(s):
    # 按空格把字符串拆成单词列表
    words = s.split()
    # 如果单词数≤2,直接返回原字符串(没中间部分需要处理)
    if len(words) <= 2:
        return s
    # 完整保留第一个单词
    first_word = words[0]
    # 中间的每个单词只取首字母并大写
    middle_parts = [word[0].upper() for word in words[1:-1]]
    # 完整保留最后一个单词
    last_word = words[-1]
    # 把所有部分用空格拼接起来
    return ' '.join([first_word] + middle_parts + [last_word])

函数测试

用你的示例字符串测试:

s1 = "RECIPE BOX WITH METAL HEART"
print(format_name(s1))  # 输出: RECIPE B W M HEART

s2 = "Helena Blanca Fernandez"
print(format_name(s2))  # 输出: Helena B Fernandez

用Pandas处理整列数据

假设你的DataFrame名叫df,要处理的列是target_col,直接用apply方法批量处理:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'target_col': [
        "RECIPE BOX WITH METAL HEART",
        "Helena Blanca Fernandez",
        "Apple Pie",
        "Hello World Test Example"
    ]
})

# 把函数应用到整列,生成新列
df['formatted_col'] = df['target_col'].apply(format_name)

print(df)

新手注意事项

  • split()默认按任意数量空格分割,不用担心字符串里的多空格问题
  • words[1:-1]是Python切片语法,取从第2个单词到倒数第2个单词(左闭右开)
  • 如果需要统一字符串大小写,比如全大写,可以在拆分成单词前加s = s.upper()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:10:28