Pandas查询匹配完整单词时出现Syntax Error问题求助
修复Pandas完整单词查询的语法错误并实现需求
问题分析
原代码通过str.contains实现子串匹配,但无法限定完整单词;修改代码时因字符串格式化、正则表达式写法及符号配对错误,触发SyntaxError。
错误根源
修改后的代码存在多处语法问题:
- 正则表达式
r'\b{v}\b'未正确嵌入f-string,转义字符处理错误 - 引号、括号配对混乱,导致Python解析器无法识别正确的代码结构
修复后的代码
dfs = [] for row in mapping_excel.to_dict(orient='records'): query_filter = ' & '.join([f"{k}.str.contains(r'\\b{v}\\b', case=False, na=False)" for k, v in row.items() if v and k != 'exclusion_criteria']) df = final.query(query_filter, engine='python') df['exclusion_criteria'] = row['exclusion_criteria'] dfs.append(df) exc_df = pd.concat(dfs)
核心修改说明
- 正则表达式正确嵌入:在f-string中使用
r'\\b{v}\\b',双反斜杠确保\b(单词边界)被正则引擎正确识别,实现完整单词匹配 - 符号配对修正:调整引号和括号的嵌套,保证
str.contains的参数格式合法,避免语法解析错误 - 保留原有逻辑:维持多条件
&拼接、空值过滤等原有逻辑,仅修改匹配规则
特殊场景处理
若匹配值v包含正则特殊字符(如.、*、?),需先转义避免正则解析异常,代码调整如下:
import re dfs = [] for row in mapping_excel.to_dict(orient='records'): query_filter = ' & '.join([f"{k}.str.contains(r'\\b{re.escape(v)}\\b', case=False, na=False)" for k, v in row.items() if v and k != 'exclusion_criteria']) df = final.query(query_filter, engine='python') df['exclusion_criteria'] = row['exclusion_criteria'] dfs.append(df) exc_df = pd.concat(dfs)
内容的提问来源于stack exchange,提问作者Mahesh Patil
相关产品推荐
相关产品推荐

