第二章:25+ Python 数据操作教程(第十节如何在 PANDAS 的查询中使用变量)

253 阅读1分钟

​假设您想在 Python 的 pandas 包中的查询中引用变量。这似乎是一项简单的任务,但有时却变得令人畏惧。让我们通过下面文章中的例子来讨论一下。

让我们创建一个 3 列 4 行的示例数据框。该数据框用于演示目的。

2023-06-24_16h14_21.png

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'"

如果您想在查询中传递多个列作为变量。这里我们使用列col2col3

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))