假设您想在 Python 的 pandas 包中的查询中引用变量。这似乎是一项简单的任务,但有时却变得令人畏惧。让我们通过下面文章中的例子来讨论一下。
让我们创建一个 3 列 4 行的示例数据框。该数据框用于演示目的。
import pandas as pd
df = pd.DataFrame({"col1" : range(1,5),
"col2" : ['A A','B B','A A','B B'],
"col3" : ['A A','A A','B B','B B']
})
编辑
A A过滤列中的值col2
为了在查询中引用变量,您需要使用@
明确提及价值
newdf = df.query("col2 == 'A A'")
参考方法
myval1 = 'A A'
newdf = df.query("col2 == @myval1")
如何在查询中将列名作为变量传递
我们引用的是要用于子集或过滤的列,而不是过滤器值。
myvar1 = 'col2'
newdf2 = df.query("{0} == 'A A'".format(myvar1))
{0} takes a value of variable myvar1. "{0} == 'A A'".format(myvar1) returns "col2 == 'A A'"
如果您想在查询中传递多个列作为变量。这里我们使用列col2和col3。
myvar1 = 'col2'
myvar2 = 'col3'
newdf2 = df.query("{0} == 'A A' & {1} == 'B B'".format(myvar1, myvar2))
"{0} == 'A A' & {1} == 'B B'".format(myvar1, myvar2) is equivalent to "col2 == 'A A' & col3 == 'B B'"
如何处理列名中的空格
为了便于说明,让我们col2通过在列之间添加空格来重命名列。
df.rename(columns={'col2':'col 2'}, inplace = True)
通过使用反引号,``您可以传递包含空格的列。
myvar1 = '`col 2`'
newdf = df.query("{0} == 'A A'".format(myvar1))