Pandas DataFrame多列查找指定字符数据及str属性报错解决方法
报错原因
.str是pandas中单列Series对象的字符串处理访问器,你通过df_y[['column1', 'column2', 'column3']]选取多列得到的是DataFrame对象,本身不提供.str属性,因此直接调用会触发'DataFrame' object has no attribute 'str'错误。
正确实现方案
核心思路是先对每一列单独做字符串匹配,再按行聚合匹配结果得到筛选所用的布尔掩码,对应不同筛选需求的写法如下:
- 常规场景:只要任意一列包含'K'或'm'就保留整行
用apply把字符串匹配逻辑应用到每一列,再通过any(axis=1)判断行维度是否有任意一列匹配:
代码中# 生成筛选掩码:三列中任意一列包含'K'或'm'则标记为True filter_mask = df_y[['column1', 'column2', 'column3']].apply( lambda col: col.str.contains('K|M', na=False, regex=True) ).any(axis=1) # 应用掩码得到筛选结果 df_result = df_y[filter_mask]na=False的作用是把列中的空值统一判定为不匹配,避免空值导致布尔掩码出现NaN、触发筛选报错。 - 严格匹配场景:需要三列同时包含'K'或'm'才保留整行
只需要把上述代码里的.any(axis=1)替换为.all(axis=1)即可。
补充说明
原代码中写的'K|M'正则匹配规则是正确的,str.contains默认开启正则匹配,这个写法可以同时匹配字符K或者m,不需要调整匹配逻辑。
内容的提问来源于stack exchange,提问作者On J
相关产品推荐
相关产品推荐

