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

在Pandas中实现:列值不匹配特定字符串时转为大写

在Pandas中实现指定列不匹配特定前缀时转大写,匹配时保留原值

需求描述

针对DataFrame中的指定列,当列值不匹配给定的多个字符串前缀时,将其转换为大写;若匹配前缀,则保留原列值。

示例数据

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'freq': ['/Weekly/', '/ad/','/Annual/', '/aB/'],
    'typ': ['TEST', 'A','TEST2', 'YYYY'],                                    
    'category': ['ACC', 'T','TEST3', 'ZZZZ'],
    'id': ['1', '2','3', '4']
})

正确实现代码

原始代码存在语法错误,np.where的参数格式应为np.where(条件表达式, 满足条件时的取值, 不满足条件时的取值),修正后的代码如下:

# 当freq列不匹配'/Wee'或'/Ann'前缀时转为大写,否则保留原值
df['tgt'] = np.where(
    ~df['freq'].str.startswith(('/Wee', '/Ann')),
    df['freq'].str.upper(),
    df['freq']
)

代码说明

  • df['freq'].str.startswith(('/Wee', '/Ann')):判断freq列的值是否以/Wee或/Ann开头,返回布尔类型的Series
  • ~:对布尔值取反,标记出不匹配前缀的行
  • np.where根据标记为对应行赋值:不匹配前缀的行转大写,匹配前缀的行保留原freq值

预期输出

freq    typ category id       tgt
0  /Weekly/   TEST      ACC  1  /Weekly/
1     /ad/      A        T  2     /AD/
2  /Annual/  TEST2    TEST3  3  /Annual/
3     /aB/   YYYY     ZZZZ  4     /AB/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 21:23:15