首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么这个熊猫DataFrame.query表达式使用文字,而不是变量替代?

为什么这个熊猫DataFrame.query表达式使用文字,而不是变量替代?
EN

Stack Overflow用户
提问于 2022-03-25 18:48:10
回答 1查看 128关注 0票数 1

我遇到了这样一种情况:我可以在查询字符串中使用列名和字符串文本来查询熊猫数据

代码语言:javascript
运行
复制
import pandas as pd

data = pd.DataFrame([list('aba'),
                     list('xyz')],
                    columns=['A', 'B', 'C'])

data.query("A == 'a'")
#    A  B  C
# 0  a  b  a

data.query("A.eq('a')")
#    A  B  C
# 0  a  b  a

但是,当我使用变量替换而不是列名时,我会得到错误。

代码语言:javascript
运行
复制
x = 'A'

data.query("@x == 'a'")
# KeyError: 'False: boolean label can not be used without a boolean index'

data.query("@x.eq('a')")
# AttributeError: 'str' object has no attribute 'eq'

到底怎么回事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-25 18:54:11

@pandas.eval中引用的变量应该引用本地命名空间中的变量,而不是DataFrame中的列。因此,它将以@为前缀的变量解释为非文字变量。(例如,"@x.eq('a')"被扩展为"'A'.eq('a')",而您想要"A.eq('a')")

https://pandas.pydata.org/docs/user_guide/enhancingperf.html#local-variables

如果您想在其中替换列名并让熊猫解析它们,您可以使用字符串格式方法或f-string

代码语言:javascript
运行
复制
import pandas as pd

data = pd.DataFrame([list("aba"), list("xyz")], columns=["A", "B", "C"])

x = "A"

data.query(f'{x} == "a"') 
   A  B  C
0  a  b  a

这样,在pandas获得字符串之前就会对字符串进行内插,并且它可以处理那些引用列的变量。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71621772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档