Pandas Query执行报错,如何基于Section和Title筛选CSV中的ID?
解决Pandas query筛选数据的SyntaxError问题
问题场景
给定CSV数据:
ID,Title,Created By,Created On,Estimate,Forecast,Priority,References,Section,Section Depth,Section Description,Suite,Suite ID,Type,Updated By,Updated On C28045,test1,dsa,10/27/2022 1:56 AM,,,Highest,,primary,0,,Master,S378,Automated,test,10/27/2022 4:33 AM C28060,test32,dsa,10/27/2022 4:34 AM,,,Medium,,primary,0,,Master,S378,Automated,test,10/27/2022 4:34 AM C28062,test5,dsa,10/27/2022 4:34 AM,,,Medium,,primary,0,,Master,S378,Automated,test,10/27/2022 4:34 AM C28059,test6,dsa,10/27/2022 4:06 AM,,,Medium,,sec,0,,Master,S378,Automated,test,10/27/2022 4:33 AM C28061,test643,dsa,10/27/2022 4:34 AM,,,Medium,,sec,0,,Master,S378,Automated,test,10/27/2022 4:34 AM C28063,tes4352,dsa,10/27/2022 4:34 AM,,,Medium,,sec,0,,Master,S378,Automated,test,10/27/2022 4:34 AM
尝试用Pandas根据Section和Title筛选对应ID,编写代码如下:
import pandas as pd data = pd.read_csv(csvPath) data.query('Section = primary and Title = test32', inplace=True) print(data)
执行后触发错误:
File "<unknown>", line 1 Section =primary and Title =test32 ^^^^^^^^^^^^^^^^ SyntaxError: Python keyword not valid identifier in numexpr query
错误原因
- 比较运算符错误:
query表达式中,相等比较需用==而非=,=是赋值运算符,不符合查询语法规范。 - 字符串值未加引号:
primary和test32是字符串字面量,未加引号会被Pandas解析为变量名,导致识别错误。
修复方案
方案1:修正query语法
将比较运算符改为==,并给字符串值添加引号(注意和外层字符串的引号区分):
import pandas as pd data = pd.read_csv(csvPath) # 外层用单引号,内部字符串用双引号 result = data.query('Section == "primary" and Title == "test32"') # 或外层双引号,内部单引号 # result = data.query("Section == 'primary' and Title == 'test32'") print(result['ID'].values[0]) # 直接输出匹配的ID
方案2:使用布尔索引(更直观)
如果觉得query语法容易踩坑,推荐用布尔索引筛选:
import pandas as pd data = pd.read_csv(csvPath) # 布尔条件组合筛选 filtered_data = data[(data['Section'] == 'primary') & (data['Title'] == 'test32')] # 提取并输出ID if not filtered_data.empty: print(filtered_data['ID'].iloc[0]) else: print("未找到匹配的数据")
两种方案均可正确筛选出目标记录,对应的ID为C28060。
内容的提问来源于stack exchange,提问作者gabriel munteanu
相关产品推荐
相关产品推荐

