使用df.query多行查询遇ValueError报错,求助问题原因
问题原因与解决办法
原因分析
df.query() 不支持包含换行符的表达式字符串——哪怕加了反斜杠续行,只要最终传给它的字符串里残留换行(比如三重引号未正确消除换行、反斜杠后误加空格),就会触发这个报错。你参考的方案可能没彻底解决字符串换行的问题,所以错误依旧。
可行解决方案
方案1:合并成单行表达式
直接去掉换行和反斜杠,写成单行:
column = 'method' idx = df.query(f"{column} == 'One' and number.notnull() and flag.isnull()").index
方案2:字符串拼接保留可读性
想保留多行排版清晰度的话,拆分多个单行字符串让Python自动拼接,最终传给query的是无换行的字符串:
column = 'method' idx = df.query( f"{column} == 'One' " "and number.notnull() " "and flag.isnull()" ).index
方案3:改用df.eval()
根据报错提示,多行表达式可以直接用df.eval(),它天然支持多行写法:
column = 'method' idx = df[df.eval( f"""{column} == 'One' and number.notnull() and flag.isnull()""" )].index
额外注意点
你的DataFrame示例里列名带引号(比如'method'),如果实际列名真的包含引号,需要在query/eval里用反引号包裹列名,比如:
idx = df.query(f"`'method'` == 'One' and number.notnull() and flag.isnull()").index
但通常列名不会带引号,大概率是你输入示例时的格式问题,可根据实际情况调整。
内容的提问来源于stack exchange,提问作者geds133
相关产品推荐
相关产品推荐

