使用.loc与.casefold实现DataFrame不修改原值的大小写不敏感筛选
实现方法
你之前的写法存在两个核心错误:
casefold是字符串类的内置方法,不能直接作用于Pandas的Series对象,需要通过Pandas提供的.str字符串访问器调用- 逻辑顺序错误,应该先对列内容做小写转换,再和筛选条件做相等判断,而不是把相等判断的结果丢进
casefold里处理
基础实现写法
df.loc[ (df['Record Type'].str.casefold() == 'keyword') | (df['Record Type'].str.casefold() == 'product targeting') ]
更简洁的多条件写法
如果需要匹配多个目标值,用isin方法简化代码:
# 提前定义所有需要匹配的小写目标值 target_list = ["keyword", "product targeting"] df.loc[df['Record Type'].str.casefold().isin(target_list)]
说明
以上写法仅在筛选判断时临时对列内容做小写转换,完全不会修改原DataFrame的存储值,原有数据的大小写特性会完整保留。
如果你的Record Type列存在空值/非字符串值,可以在调用casefold时添加na=False参数避免报错:
df.loc[df['Record Type'].str.casefold(na=False).isin(target_list)]
内容的提问来源于stack exchange,提问作者ah2Bwise
相关产品推荐
相关产品推荐

