Python Pandas中多条件过滤DataFrame问题求助
解决Pandas多条件过滤DataFrame的问题
原代码的核心错误
- 拼写错误:
.srt.contains应为.str.contains(Pandas字符串处理的正确属性是str) - 逻辑运算符误用:你的需求是三个条件同时满足,需用
&(逻辑与)而非|(逻辑或);且每个条件必须用括号包裹,避免运算符优先级导致的计算错误 - 冗余写法:多次调用
contains不如用更简洁高效的方式处理多值匹配
正确实现方式
方式1:模糊匹配(适用于城市/职位名称是子串的场景)
如果column2中的城市名包含"city1"/"city4"、column5中的职位名包含"job3"/"job9"时需要保留,用正则匹配简化contains调用:
df_srm_final = df_name_filtered_columns[ (df_name_filtered_columns["column2"].str.contains("city1|city4")) & (df_name_filtered_columns["column5"].str.contains("job3|job9")) & (df_name_filtered_columns["column11"] > 0) ]
方式2:精确匹配(推荐,适用于城市/职位是完全匹配的场景)
如果需要column2严格等于"city1"或"city4"、column5严格等于"job3"或"job9",用isin()更高效易读:
df_srm_final = df_name_filtered_columns[ (df_name_filtered_columns["column2"].isin(["city1", "city4"])) & (df_name_filtered_columns["column5"].isin(["job3", "job9"])) & (df_name_filtered_columns["column11"] > 0) ]
额外说明
- 若
column11存在非数值类型数据,可先转类型再过滤:df_name_filtered_columns["column11"] = pd.to_numeric(df_name_filtered_columns["column11"], errors="coerce"),确保过滤逻辑正常运行 - 所有条件必须用括号包裹,因为Pandas中
&的优先级高于比较运算符(>),不加括号会导致运算顺序混乱
内容的提问来源于stack exchange,提问作者Darko Petkovic
相关产品推荐
相关产品推荐

