对DataFrame列使用casefold()结合contains实现不修改原值的大小写不敏感搜索
正确实现方式
以下两种写法都不会修改原DataFrame的原始数据,仅在匹配判断时临时处理大小写,符合需求:
写法1:和你现有精确匹配逻辑对齐,手动转小写后模糊匹配
# 生成布尔筛选掩码,casefold()比lower()对特殊字符的大小写适配更全面,加na=False避免空值引发索引错误 mask = df['Campaign'].str.casefold().str.contains('b0', na=False) # 按掩码筛选符合条件的行 result = df.loc[mask]
写法2:更简洁的内置参数实现,无需手动转大小写
直接使用str.contains的case参数关闭大小写匹配,效果完全一致:
mask = df['Campaign'].str.contains('b0', case=False, na=False) result = df.loc[mask]
原代码错误说明
你之前的写法颠倒了.loc和字符串处理的调用顺序:.loc是pandas的索引访问器,需要传入筛选条件作为参数,不能直接在.loc后调用str类方法,正确逻辑是先生成筛选用的布尔序列,再传入.loc完成行筛选。
内容的提问来源于stack exchange,提问作者ah2Bwise
相关产品推荐
相关产品推荐

