以变量作为列名的Pandas查询

p5cysglq  于 2023-04-18  发布在  其他
关注(0)|答案(2)|浏览(129)

传递我学到的信息的新应用,这是另一个问题的一部分:Unable to query a local variable in pandas 0.14.0
感谢用户@choldgraf。我从上面的链接不同地应用他的答案。
目标:在查询中使用变量作为列名
失败的例子:

import pandas as pd
fooframe = pd.DataFrame({'Size':['Large', 'Medium', 'Small', 'Tiny'], 'Color':[1, 2, 3, 4]})
myvar = 'Size'
subframe = fooframe.query("myvar == 'Large'")

上面的代码返回'myvar'的键错误。

import pandas as pd
fooframe = pd.DataFrame({'Size':['Large', 'Medium', 'Small', 'Tiny'], 'Color':[1, 2, 3, 4]})
myvar = 'Size'
subframe = fooframe.query("@myvar == 'Large'")

上面的代码在查询中的myvar前添加了“@”,以引用myvar作为局部变量。然而,代码仍然返回错误。

uqxowvwt

uqxowvwt1#

感谢用户@choldgraf。我使用了他在另一篇文章(Unable to query a local variable in pandas 0.14.0)中提到的技术,不是针对列中的值,而是针对列名。
变量可以在pandas查询中用作列名,方法是将其插入到查询字符串中,如下所示:

import pandas as pd
fooframe = pd.DataFrame({'Size':['Large', 'Medium', 'Small', 'Tiny'], 'Color':[1, 2, 3, 4]})
myvar = 'Size'
subframe = fooframe.query("`{0}` == 'Large'".format(myvar))

(其中反引号用于括住列名,处理列名中的特殊字符和空格。)

rt4zxlrg

rt4zxlrg2#

@TempleGuard527的答案很完美。这个答案只是python3.6f-string s的补充。现在,你可以这样做:

import pandas as pd
fooframe = pd.DataFrame({'Size':['Large', 'Medium', 'Small', 'Tiny'], 'Color':[1, 2, 3, 4]})
myvar = 'Size'
subframe = fooframe.query(f"`{myvar}` == 'Large'")

相关问题