在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
相关产品推荐
相关产品推荐

