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

如何在Pandas列中提取每个单词的首字符并保留整数?

解决DataFrame提取单词首字符并保留完整整数的问题

嘿,我明白你的需求了——要给DataFrame加个col2列,把col1里每个字母单词的首字符提出来大写,但是整数得完整保留对吧?你之前试的代码问题在于,不管是单词还是数字都只取了第一个字符,导致38变成了3,不符合预期。我来给你修正一下。

问题根源

你原来用re.findall("\w+", input)拆分字符串后,对每个元素都取item[0],数字38会被当成一个元素,取首字符就只剩3了,这就是为什么得不到GMH38的原因。我们得区分字母单词和数字,分别处理。

正确的实现方法

我们可以用正则表达式把字符串拆成数字段和字母单词段,然后对数字直接保留,对字母单词取首字符大写。结合Pandas的apply方法就能批量处理整列数据:

import pandas as pd
import re

# 构造示例DataFrame
df = pd.DataFrame({
    "col1": ["GRE MET HOCK 38", "ASS COM CORD EMERG INIT"]
})

def transform_text(text):
    # 用正则匹配数字(\d+)或者字母单词([A-Za-z]+),拆分字符串
    segments = re.findall(r"\d+|[A-Za-z]+", text)
    output_chars = []
    for seg in segments:
        if seg.isdigit():
            # 如果是数字,直接加入结果
            output_chars.append(seg)
        else:
            # 如果是字母单词,取首字符并转大写
            output_chars.append(seg[0].upper())
    return "".join(output_chars)

# 生成col2列
df["col2"] = df["col1"].apply(transform_text)

# 查看结果
print(df)

运行后你会得到预期的输出:

col1   col2
0        GRE MET HOCK 38  GMH38
1  ASS COM CORD EMERG INIT  ACCEI

代码说明

  • re.findall(r"\d+|[A-Za-z]+", text):这个正则表达式会精准拆分出所有数字和字母单词,不会把它们混在一起,比如"GRE MET HOCK 38"会被拆成["GRE", "MET", "HOCK", "38"]
  • 遍历拆分后的每个片段:判断是否是数字,是就直接保留,不是就取首字母大写
  • 最后把所有片段拼接成字符串,赋值给col2列

这样就完全满足你的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:07:38