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

Pandas使用str.title()转首字母大写时如何保留罗马数字大写格式

问题根因

pandas.Series.str.title() 方法会对字符串中所有单词做无差别格式转换:强制每个单词首字母大写、其余字母转小写,不具备语义识别能力,因此会把全大写的罗马数字(如III、VI)错误转换成Iii、Vi格式。

实现方案

核心逻辑是拆分字符串中的每个单词,单独识别罗马数字片段做特殊处理:普通单词执行首字母大写逻辑,罗马数字片段保留全大写格式,最后拼接为完整字符串。

实现代码

import re
import pandas as pd

# 匹配纯罗马数字单词的正则:标准罗马数字仅由I/V/X/L/C/D/M 7个字符组成
ROMAN_WORD_REG = re.compile(r'^[IVXLCDM]+$')

def process_model_str(text):
    word_list = text.split()
    res = []
    for word in word_list:
        # 匹配到罗马数字时,统一转全大写保留格式
        if ROMAN_WORD_REG.fullmatch(word.upper()):
            res.append(word.upper())
        # 普通单词做首字母大写处理
        else:
            res.append(word.capitalize())
    return ' '.join(res)

# 逐行应用处理逻辑到Model列
DF['Model'] = DF['Model'].apply(process_model_str)

处理效果

执行代码后得到的结果符合预期:

IDModel
1Power Jet III
2Adi Max VI

适配调整提示

  • 如果你的场景中存在超过3999的大数字罗马数字(通常用上划线标记千倍数值),可以对应调整正则匹配规则适配。
  • 如果Model列中还存在其他需要固定全大写的缩写(如品牌缩写、行业通用缩写),可以在判断分支中增加白名单判断,对这类词统一保留全大写格式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:51:32